| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как делать снимки экрана. |
| Автор: Sunvas 21.4.2006, 07:07 |
| Нужно написать небольшой просмотрщик удаленного экрана. Есть прома - как максимально бысто делать снимки с удаленного экрана? Функция bitblt делает это очень вяло, да и удаленный комп страшно глючит, а дос режим вообще отказывается фоткать. Помогите найти альтернативное решение. |
| Автор: Guedda 21.4.2006, 07:15 | ||
|
| Автор: Guedda 21.4.2006, 11:54 |
Извиняюсь... Не знал. Самому стало интересно... Snowy, а как реализовать |
| Автор: Sunvas 22.4.2006, 07:18 | ||||
Ну так давайте соберемся и обсудим вместе!
А как же быть?
Меня это тоже заинтерисовало. |
| Автор: Rouse_ 22.4.2006, 20:59 |
| Скорость снятия снимка тебя не должна интересовать т.к. это делается достаточно быстро. Можешь проверить, отображая снимки сразуже на экране на той-же машине. Торможение в другом, а именно в ограничении пропускной способности канала. Правильное решение отправлять не картинку, а только изменения которые произошли с изображением с момента предыдущей передачи... |
| Автор: Sunvas 23.4.2006, 00:19 | ||||||||
Ну с передачей данных у меня все хорошо.
Ну если делать снимков 12 в секунду то да, а вот если более чем 24 то тут происходят глюки.
Даже если это делать так. Но ведь есть и еще одна проблемма - фоткать Directdraw и ДОС режим такие функции вообще отказываются. Что ж делать?
Посоветуй, пожалуйста, как это реализовать. |
| Автор: Rouse_ 23.4.2006, 08:42 | ||
Естественно отказываются т.к. вывод в данных режимах происходит насобственный оверлей. Тебе нужно подключиться к нему и снять изображение. Как это сделать читай тут: http://www.delphimaster.ru/articles/directx/index.html Добавлено @ 08:45 Сканировать две картинки и орагинизовывать массив по каким координатам какой пиксель изменился. Отправлять этот массив и отображать его на конечной машине. Ну а реализацию, думаю сам смошь нарисовать |
| Автор: Loader 23.4.2006, 15:05 | ||
Самый быстрый из известных мне способов. Чистый WinAPI и никакого BitBlt(). Снимает и DOS окна и все остальное.
|
| Автор: Rouse_ 23.4.2006, 15:26 |
| Loader 1. данный способ не может быть самым быстрым т.к. используется вызов StretchBlt заведомо дольше исполняющийся в отличие от BitBlt. 2. в данном примере присутствуют утечки памяти, ввиду неразрушения захваченых обьектов ядра. |
| Автор: Yanis 23.4.2006, 20:15 |
Может быть тебя это расстроит, но BitBlt и есть функция Windows API. |
| Автор: Sunvas 24.4.2006, 00:19 | ||
Так еще больше глючить будет... |
| Автор: Yanis 24.4.2006, 00:34 |
А RAdmin по твоему картинки по сети шлёт |
| Автор: Sunvas 24.4.2006, 00:45 |
| Loader, а в каком формате сохраняет твоя процедура рисунок?? - у меня сохраненный файл весит 54 байта, какой программой его нужно открывать? Добавлено @ 00:57 А я не знаю, как он действует, да и ты я думаю тоже не знаешь до конца. Или у тебя есть исходники? К тому же ДОС режим и режим игры он тоже не фоткает.. |
| Автор: Yanis 24.4.2006, 01:01 |
Это подтверждает, что он не использует сниятие скриншотов для передачи состояния удалённого экрана. |
| Автор: Sunvas 24.4.2006, 01:19 | ||
Я не обсуждаю Радмин, он мне не нужен. Мне всего лишь нужно сделать небольшой просмотрщий удаленного экрана. |
| Автор: Rouse_ 24.4.2006, 09:14 |
как реализуешь - так и будет глючить |
| Автор: Sunvas 25.4.2006, 00:24 | ||
Ты намекашь на то, что это безвыходная ситуация - чтобы я не сделал, то все равно будет глючить?
Ну это ж надо циклически сравнивать почти каждый пиксель, а затем отправлять части изображения... А если пользователь будет находиться в режиме игры.. И так снимки делаються очень медленно, а так еще и сканировать изображение, то и удаленный комп будет страшно глючить и скорость передачи упадет... |
| Автор: <Spawn> 25.4.2006, 06:51 |
| Sunvas, Тебе верно говорят. Но данный подход будет несколько не быстрым, если ты его реализуешь, например, через SetPixel, которая черезвычайно медленна. Если хочется быстро менять нужные пикселы на своем изображении, то ищи клас TQuickPixel, либо на этом форуме, либо на мастерах дельфи (не помню точно). Скорость там потрясная из за прямого доступа к видеопамяти, если мне не изменяет память. Реализация на ассемблере |
| Автор: Rouse_ 25.4.2006, 10:07 | ||||
Не обязательно каждый, можно сравнивать блоками, тогда получишь прирост производительности.
Ни на что не намекаю |
| Автор: Sunvas 26.4.2006, 07:00 | ||
Немного не понял, а зачем менять пиксели? |
| Автор: Yanis 26.4.2006, 07:55 |
Ты же не только получать изображение будешь, но и выводить на устройство... |
| Автор: Sunvas 27.4.2006, 07:50 | ||
Но ведь мне нужен самый быстрый алгоритм деланья списков экрана, а не быстро выводить картинку на устройство.. Или я не понял о чем вы говорите.. |
| Автор: Yanis 27.4.2006, 08:47 |
т.е. тебе нужно только получить снимок удалённого экрана, а отображать ты его нигде не собираешься? |
| Автор: Sunvas 27.4.2006, 17:04 | ||
Я же говорю, что это будет программа-просмотрщик удаленного экрана. Отображать я собираюсь на другом компе. Просто нужно максимально быстро делать снимки экрана и чтобы удаленный комп не глючил! |
| Автор: Тьма 27.4.2006, 17:12 |
| но тебе все равно надо будет выводить эти пикселя на какой нибуть битмап |
| Автор: Sunvas 27.4.2006, 17:23 |
| Но это уже совсем другая проблемма!!! |