![]() |
|
Модераторы: Poseidon |
![]()
|
|
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
Задача: отправлять на удаленный ПК состояние экрана.
Про сеть упомянул в связи с желанием минимизировать объем передаваемых данных. Кроме того, при желании иметь на целевом компе комфортное кадрочередование(ну, не меньше 10 кадров в секунду) не хотел бы загружать мониторимый комп частыми вычислениями. Надумал три стратегии(метод мозгового штурма - сразу же ногами не пинать 1. Съемка по таймеру. Плюс: простота реализации. Минусы: - нагрузка на сеть - нагрузка на процессор 2. Съемка по запросу клиента. Возможен вариант ответа "ничего не изменилось, используй предыдущую картинку". Плюс: не требуют - не снимаем(меньше нагрузка на процессор мониторимой машины), меньше нагрузка на сеть(можно получать ответ "ничего не изменилось, рисуй, что было раньше") Минусы: - необходимо как-то фиксировать, что "изменений не было" на мониториемой машине - либо побитовое сравнение образов, либо ещё как. - при нескольких клиентах нагрузка на сеть нерационально высока(нельзя на запрос одного клиента бросить широковещательный запрос - остальным клиентам может не пригодиться) 3. Съемка по событию(перехват сообщения на перерисовку и подобное). Плюс: можем бросать при изменении широковещательный пакет, все остальное время не передавать ничего - нагрузка на сеть минимальна, процессор загружен только когда надо. Минус: сложность реализации --------------------- Вопрос: какие ещё возможны варианты? |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 6 Всего: 158 |
очевидно, что 3 вариант оптимален. только вот думается, что без ограничения скорости "обновления" все равно не обойтись. и broadcast, наверное, лучше не делать - 2-3 секретарши, активно перебирающих претендентов на каких-нибудь "знакомства.ру", завалят сеть.
|
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 3 Всего: 329 |
тебе нужно сделать такую опцию, как в RAdmin (для регулировки нагрузки на сеть и на процессор):
1. количество снимков в минуту или секунду 2. глубина цвета. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
dumb, ну, некая "регистрация" клиентов все равно будет, и широковещение будет применяться только при количестве клиентов более 5-6, да и к секретаршам не попадет
некритично. сжимать буду JPEG - размеры вряд ли будут большие... дык, если юзать вариант 2 или вариант 3 это вообще не надо - съемка будет инициироваться "когда надо" |
|||
|
||||
| artem1987 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 203 Регистрация: 18.7.2006 Где: Калининград Репутация: нет Всего: нет |
если только на мониторимом компе проги со скромной графикой , представь у Picasa сколь WMPaint ходит. --------------------
Don't ask me why, ask me how. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Добавлено @ 18:10 Еще бы в PNG жал Я бы вычитал два соседних кадра и жал все это в RLE, так хоть есть шанс, что машина успеет сжать. Да и разностная картинка будет иметь много черных полей, которые отлично и без нагрузки жмет это самое RLE. Это сообщение отредактировал(а) alexeis1 - 14.11.2006, 18:11 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 5 Всего: 133 |
Я что-то не понял. skyboy, ты собираешься "фоткать" экран клиента и каждый раз отправлять картинку? Глупо. Я бы отправлял только то, что изменилось. Т.е. програма на "сервере" анализиует предыдущий "снимок" и сравнивает с нынешним. Разнице отправляет клиенту. Клиент принимет, анализиует что изменилось и отображает уже новую картинку, с учетом полученной разницы. Таким образом можно уменшить траффик в десятки раз, при этом не создавать эффект "кадрирования", как при "фотографировании" по таймеру.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| W1zArD |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 29.1.2006 Репутация: -1 Всего: 3 |
Poseidon если я не путаю... то gif работает на таком же принципе...
|
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
ну, блин, маньяки %) я не спросил, что лучше, что - хуже... просто поинтересовался - имеются ли другие варианты... а вы сразу - в критику
Ты об этом, Poseidon: ? |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 5 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Хотелось всё-таки поднять этот вопрос...
Скажите, а в какой формат Вы бы порекомендовали сохранять кидаемый скриншот? Чем потом жать или нет? Видел тут RLE предлагали, это ли оптимальный вариант?? BMP, потом по нему RLE..? |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
DelphiFun, если сам передаешь - зачем использовать какой-нить формат? сжимай в поток, распаковывай из потока...
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
skyboy, конечно! Но кто мешает RLE самому написать, тем более, что у microsoft полностью описан алгоритм. Поскольку будет много черных полей, то RLE в этом случае подходит идеально.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
А какие именно чёрные поля?
Мы отправляем ведь только изменённые куски.. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
DelphiFun, в том-то и фишка: видимо ты просто неполностью прочитал посты. предлагается передавать только изменения: для этого делать между соседними кадрами попиксельный(можно пройтись по компонентам цвета) XOR - после этой операции одинаковые участки станут девственно(
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Хм. А как их найти эти самые измененные куски? Вычли из предыдущего кадра новый, вот и получили черные поля. Черное поле это цвет со значением "0" т.е. неизменные поля. РЛЕ такие области кодирует 1) Признак повторения 2) Цвет повторения 3) Число пикселей повторения. Поскольку в памяти битовая карта непрерывная и разбиение на строки идет внизу сверх, а в строках пикселы слева направо, то можно вообще игнорировать конец строки если на новой стоке продолжается тотже цвет. Как видно алгоритм основан, на простом сравнении и потому черезвычайно быстрый. Хотя для скриншотов наилучшее сжатие обычно дает png, но время сжатия одного кадра столь велико, что думаю даже Dual Core 6700 не потянет больше 5 кадров / с. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
а.. спасибо за объяснение - понял.
Хорошее решение, мне представлялось более геморным. |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Хм, а что-то xor'ом не получается выделить разницу.. Пробую так:
В чём тут может быть проблема? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
А зачем XOR ? Чем плох обычный минус? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Так нет, ни xor, ни минус не срабатывают!
А у тебя разве сработало? А xor я попробовал по совету skyboy несколькими постами ранее здесь. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Убрал все ненужное и подправил одну строчку
В прикрепленном архиве 3 файла 1) исходный, 2) измененный 3) разница Присоединённый файл ( Кол-во скачиваний: 7 )
24.7z 108,27 Kb-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Кстати можно было сделать все намного лучше и быстрее при помощи функции
Вот последний параметр как раз и определяет растровую операцию
Полный спектр всех операций, которые только могут понадобиться -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Во чёрт, ошибся в еденичке!!
Спасибо за помощь!! Хм, а почему с этими файлами аналогично не работает? http://ifolder.ru/774066 Файлы 24битовые, что в них не так..? Кстати, а код:
тоже весьма интересно работает, только немножечко не доходит до результата... |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
На настоящих скриншотах опробовал - работает..
удивительно.. Рисовал в Microsoft Paint, что же в них может быть такого, что прога не выводит корректный результат? |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
хм.. с одними файлами работает с другими нет, не понятно что тут может стать причиной..
К алгоритму вроде придраться нельзя, так в чём же ошибка моя?? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
DelphiFun, Сорри 2 дня был полный дисконект
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Вот эти файлы и файл-разницы..
С наступившим!! Присоединённый файл ( Кол-во скачиваний: 4 )
2.zip 15,59 Kb |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Там все нормально, только результат будет зависеть от порядка следования картинок. Если использовать XOR то в этом случае все однозначно. Результирующая картинка является правильной. Кстати я настоятельно советую воспользоваться bitblt, поскольку она использует аппаратное ускорение видеокарты и скорость такой операции будет гораздо больше чем при использовании процессора. Добавлено @ 21:51 Вот пожалуйста насколько проще и главное быстрее, можно сделать тотже самый XOR
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Спасибо большое за ответ!
А почему же получается такой результат?? Но XOR ведь тоже не отделяет эту новую линию от остальных..(то бишь разницу).. или у тебя отделяет? XOR у меня выделяет эту линию красным цветом.. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Правильно красным! А кто сказал, должно быть по другому? Это же XOR! может попробовать посчитать какой получится результат (0х00FFFF XOR 0xFFFFFF). Подскажу 1 XOR 1 = 0, 1 XOR 0 = 1. Теперь ясно почему результат 0xFF0000 ? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
но кусок:
также ведь не отделяет разницу... А вот он-то по идее должен.. нет разве? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Чтобы так было, надо было сравнивать цвета целиком! А не составляющие R G B отдельно. Составляющие как раз могут и совпадать, а цвета целиком нет, вот и получается белиберда. Вот и выходит, что часть составляющих занулена, а часть нет, в результате на лицо непонятные обрывы и проч. Лучше всего как и сказали XOR он никогда не даст превышения уровня и всегда позволит произвести обратную операцию. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Ха! действительно.. мы же сравниваем не цвета друг с другом..
А в случае с XOR'ом передавать именно эту картинку? А как же произвести накладку на предыдущий скриншот так, чтобы оно наложилось именно тем "цветом" который был изначально..? Ещё раз XOR'ом? ( странно спросил, я это и сам понял, не смог сформулировать точнее ) |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Кстати, а что означает "превышения уровня"? Какого уровня, о чем речь идёт?
|
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
По идее да. Не совсем ее, точнее ее сжатый аналог.
Составляющая цвета имеет 255 градаций, если скажем вычитать цвета, то например 212 - 220 = - 8, но такое число реально запишется как 247, потому что вышли из диапазона 0..255. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
А, ну с этим понятно. С RLE я думаю проблем у меня не возникнет. А обратно это XOR чего с чем? Одно это бит картинки, а второй? Мне кажется такое впринципе не прокатит, потому как посмотри какая после XOR'а получается интересная разница... линия ( бирюзового цвета ) ведь ПОВЕРХ, а он в разнице отображает ещё и то, что было под ней... блин а как такое вообще возможно? Таким макаром любую картинку сканировать можно на то, что было под верхней линией На крайняк прийдётся сравнивать именно цвета объединяя несколько битов в один.. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
||||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Работает!!!
skyboy, Alexeis, Спасибо большое за помощь в решении этой проблемы!! |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |