![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Remote Admin - отображение полученных кадров(картинок) [D5, D6, D7, NT4, Win2k, WinXP]
neodiX © (2002-12-17 20:38:00)Всем привет!
Проблема состоит не в том, как принять/отаслать image"и экрана, а как и их отображать... Проблема на примере: первый кадр у меня десктоп, получил, нарисовал - база есть, когда я получаю следующий image, предположим окна, я запоминаю у себя на форме (где нарисован десктоп) координаты, куда будет рисоватся окно, что бы потом когда я получил новый кадр после перерисовки нарисвать вместо бывшего окна пустое место т.е. десктоп, а в новом месте новый кадр. Все получается когда работа идет с одним окном, но как появляется больше 2, то все - облом, что мне все места запоминать? Абсурд! Так вот я мастеров графики спрашиваю: "Может можно как нибудь нарисовать картинку на форме, а потом рисуя на ней(ну как бы над ней) что угодно, что бы она не затиралась ?".
P.S. Есть пример в делфи, "EarthPng" в папке source,там земля и падл заранее описаны, для них и канва и дц созданы, а в моем варианте етих обьектов (земель всяких) в одно время может быть хоть море. Как быть мастера?
P.S. А может я вообще не так это отображение представляю? Ни в ту сторону капаю...? Может у кого есть лучше предложения? Если кто сталкивался с этой проблемой и решил, всегда жду есходников.
Заранее всем спасибо.
Roger (2003-01-04 10:21:00) [1]Я тут подумал, можно ещё упростить. проверять изменения в центре квадрата (один пиксел), и если есть изменения, то передавать один этот квадрат.
> "Что просто, то гениально!". Огромное спасибо!
Идея бесплатная, так что обращайся. В самом программировании, может я и не очень спец, но насчёт идей - сколько угодно!
(Как то не скромно получилось, ну да ладно):)))
neodiX (2003-01-02 18:03:00) [2]Да, вот это идея! Правильно говорят: "Что просто, то гениально!". Огромное спасибо!
Roger (2002-12-30 14:26:00) [3]
> примегающие к нему квадраты
Я имел в виду прилегающие.
Roger (2002-12-30 14:24:00) [4]
> если хоть один пиксел не совпадает
Узел, это и есть ПИКСЕЛ, и если он именился, то посылаешь примегающие к нему квадраты. Ну вспомни школьную тетрадку в клетку, узел это пересечение линий, а квадраты, это клетки.
neodiX (2002-12-30 13:21:00) [5]т.е. как я понял алгоритм такой:
проверяю попиксельнопервый узел, если хоть один пиксел не совпадает сразу же этот узел посылаю и перехожу проверять следующий и т.д.. Правильно?
Roger (2002-12-30 13:12:00) [6]Ну и что что попиксельно, так узлов то при шаге 100x50 получится всего около 1500, а это даже для 200го пня не проблема.
neodiX (2002-12-30 12:40:00) [7]2>Roger
> наложи на изображение сетку, частоту подбери сам, и проверяй
> изменения в узлах и если есть изменение, то перерисовываешь...
а как по твоему проверяются изменения в узлах? Хорошо бы было если так
if nodeBmp1=nodeBmp2 then ...
так нет, надо по пиксельно проверять. A может ты знаешь как быстрее?
Roger (2002-12-30 11:55:00) [8]Повторение получилось из за плохой связи, постоянно рвётся! :(((
Roger (2002-12-30 11:52:00) [9]
> предположим на первом изо. есть окно, а на втором это окно
> передвинулось
КАКОЕ ОКНО??? А если я печатаю текст в полноэкранном WORDе? какие координаты какого окна ты собираешся вычислять?
> сравнивая попиксельно два изображения, я нашел начальную
> координату несовпадения
Можно вопрос - ЗАЧЕМ ПОПИКСЕЛЬНО????? Даю идею - наложи на изображение сетку, частоту подбери сам, и проверяй изменения в узлах и если есть изменение, то перерисовываешь прилегающие к узлу квадраты.
Повторяю это только идея, реализацию можно усложнить.
Roger (2002-12-30 11:05:00) [10]А нафига проверять попиксельно? Наложи на экран сетку и проверяй изменения в узлах, если узел изменился, то пересылай прилегающие площади. Если не хочешь пересылать все 4 квадрата, то вычисли в каком именно есть изменения.
> предположим на первом изо. есть окно, а на втором это окно
> передвинулось
КАКОЕ ОКНО???? А если я допустим раскрыл WORD во весь экран ипечатаю текст? какие координаты какого окна ты собираешся отслеживать???
neodiX (2002-12-29 22:25:00) [11]Ну вот попробывал попиксельно проверять что изменилось, и то что изменилось (эти пиксели) посылать. Так вот - это все тааак медлено работает, что хоть застрелись. Ну а так и должно быть.. весь десктоп в 1024х768 проверять попиксельно - это все же время и ресурсы компа. Если кто знает по какому принципу работает MPEG4 обьясните plz.
neodiX (2002-12-29 15:47:00) [12]2>Roger
> Надо только выяснить что изменилось, и если есть изменения,
> то отобразить их на клиентском экране
хорошо, сравнивая попиксельно два изображения, я нашел начальную координату несовпадения (предположим на первом изо. есть окно, а на втором это окно передвинулось), ну и что теперь? Мне же все равно надо до конца сравнивать что изменилось... Теперь будут не совпадать пиксели в диапозоне изо1 ОR изо2, так мне что весь этот диапозон и посылать?
Я уже долго над этим думаю, но ничего не могу придумать. Я то понимаю, что надо посылать только изменения но реализовать этого не могу. Если у кого есть хоть примеры - помогите plz.
Roger (2002-12-24 17:46:00) [13]Парни, вы пытаетесь заново изобрести формат видеосжатия типа MPEG4. Не стоит этого делать. Лучше забудь про все окна и объекты, работай с изображением!!! у тебя есть 2 изображения экрана в разные моменты времени. Надо только выяснить что изменилось, и если есть изменения, то отобразить их на клиентском экране. Естественно, когда изменений нет - нагрузка на сеть нулевая и перерисовывыть ничего не надо, а когда на сервере смотрят кино, то тут уж извините! :)))
Подумай над этим.
neodiX (2002-12-24 12:41:00) [14]2> смок_ер
> просто посылать не информацию об окнах, а о конкретных пикселах!
это что ли посылать массив пикселев? да еще к каждому пикселю цвет - не думаю что выдет лучше.
> на стороне клиента обрабатывать эту информацию и менять
> нужные пикселы!
менять т.е. рисовывать? Хорошо, я получил масив пикселей в 30Кб, то что мне по одному пикселю выводит на канву? Не долго ли?
Подробней обьясни свою идею, может я не так понял.
smok_er (2002-12-23 18:03:00) [15]Моя идея в следующем...
просто посылать не информацию об окнах, а о конкретных пикселах!
его координаты и цвет
на стороне клиента обрабатывать эту информацию и менять нужные пикселы!
так самый лучший вариант
neodiX (2002-12-23 11:21:00) [16]Перед тем как делать хотел бы уточнить пару вещей...
> сервер посылает клиенту команду
>
> ПЕРЕРИСОВАТЬ координаты 10 10 400 20 фрейм данные этой
> части
> экрана
>
> ПЕРЕРИСОВАТЬ координаты 10 10 20 200 фрейм данные этой
> части
> экрана
перерисовать на что? т.е. перерисовать два куска с 0 0 800 600 фрейма? Но может быть такой вариант, что на "0 0 800 600" фрейме одно окно уже было нарисовано так, что наше новое окно с ним пересеклось (как бы часть его была нарисована на этом окне, т.е. окно было нарисовано И на главном "0 0 800 600" И на каком то еще окне) тогда после того как окно 2 переместилось мне что перерисовывать И часть главного "0 0 800 600" И часть того еше одного окна. Получается что мне надо запомнить это "еще одно" окно (притом, как ты понял, таких "еще одних" может быть туча). Может я ни так понял твою идею?
AlexT1000 (2002-12-20 14:57:00) [17]задача еще не решена.
незачто.
neodiX (2002-12-20 14:29:00) [18]OK, na vyhodnyh poprobuju etot variant. Esli cto, my prodolzim etot topic.
P.S. vidish, prosto ja nacinaja temu etogo dialoga nadejalsia cto est" sposob realizovat etu pererisovku na storone klienta, s pomoshju kakih nit" standartnyh metodov (tipa s ispolzovaniem vsiakih tam CreateCompatibeDC, SelectObject i t.d.). No kak ja ponial, k sozaleniju, eto nevozmozno (ili poka cto za slozno dlia menia). Nu cto ze, budem probyvat" alternativy.
Spasibo za cto vydelil kvant vremeni dlia reshenija moej zadaci.
AlexT1000 (2002-12-20 11:56:00) [19]знач так. тебе нужно хранить список всех окон на экране и их координат ( на той машине которая эти окна будет посылать. сервер) и сравнивать их каждый раз с таким же списком окон
только строить его все время на этом же сервере .
итак имеем
на экране 2 окна .
сп 1
окно 1 0 0 800 600
окно 2 10 10 400 200
построили список с экрана . имеем
сп 1
окно 1 0 0 800 600 - осталось прежним
окно 2 20 20 410 210 - переместилось
сервер посылает клиенту команду
ПЕРЕРИСОВАТЬ координаты 10 10 400 20 фрейм данные этой части
экрана
ПЕРЕРИСОВАТЬ координаты 10 10 20 200 фрейм данные этой части
экрана
НАРИСОВАТЬ ОКНО 2 в координатах 20 20 410 210 - этот слепок тебе прислали заранее.
дальше развиваешь эту идею и все у тебя заработает .
если окно удалили то
получаешь фрейм с координатами где было окно
я думаю это будет самый оптимальный вариант
neodiX (2002-12-20 09:32:00) [20]Tak ja jpeg"i i posylaju. Esli posylat" ves ekran, to daze pri konvertirovanii ekrana v jpeg maximum polucaestsia 1 frame v secundu, proverial (kak ja govoril menia eto ne ustraivaet, mne nuzno bystree, pritom zachem posylat" ves ekrana kogda izmenilas" tolko malenkaja chast"). Pritom nagruzka na komp bolshaja, samo konvertirovanie (vsego ekrana) dovolno mnogo resursov zriot.