|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
аналог радмина, сжатие скрина
Пишу аналог радмина по локальной сети, необходимо быстро сжать скриншот до 1.5 - 2 метров (как минимум), jpg, gif, png не подходят, слишком долго сжимают ... Есть ли форматы для быстрого сжатия изображения?
|
#2
|
||||
|
||||
Цитата:
|
#3
|
||||
|
||||
до 2х метров?!
у меня скриншот экрана в жпеге весит 150кб, а сжимается очень быстро: Код:
dc:=GetDC(0): bitblt(bm.canvas.handle,0,0,w,h,dc,0,0,SRCCOPY); JP.Assign(bm); Я же когда делал свою простенькую прогу удаленного просмотра рабочего стола с доп. функциями чтобы не грузить сеть (при низкой скорости соединения) кидал квадрат вокруг мыши 300х300. для справки: 800*600*3 = 1.5 метра. в БМП формате. Если сеть поддерживает, можно поступить так же. Или же разбираться с форматами видео, где кодируются только изменения. jmp $ ; Happy End! The Cake Is A Lie. |
#4
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
#5
|
|||
|
|||
Цитата:
При разрешении 1080х960 скрин сжимается за 200мсек, т.е. при наилучшем раскладе можно добиться фпс 5. Насчет квадрата, интересно, но если я открою окно? Или разверну? Надо обновить весь экран, а не 300х300, либо каждые 3-4 сек слать фулл скрин. |
#6
|
|||
|
|||
Цитата:
|
#7
|
||||
|
||||
насчет квадрата - я транслировал просто квадрат вокруг мышки. Типа обновляется то, где мышь. Если открылось окно - то надо помахать курсором по экрану чтоб все обновить Не слишком удобно, но все же лучше чем ничего.
Лучше всего отлавливать на экране изменения, как и сказал Admin. Сжимать можно во все, что угодно, но если слать небольшие куски экрана где были изменения, то думаю ЖПГ будет не самым эффективным. Более того, компьютерные скрины в ЖПГ вообще сжимаются не лучшим образом. jmp $ ; Happy End! The Cake Is A Lie. |
#8
|
||||
|
||||
Джпег идет с потерей качества.
А так берешь свой маленькой изменненный кусок экрана в виде BMP, сжимаешь Zlib и пересылаешь, и так все изменения. Вот простой пример, в виде бинарников: Remote Test. |
#9
|
||||
|
||||
Вспомнил свою старую прогу, решил переделать ее
Посоветуйте пожалуйста: как лучше всего фиксировать изменения полосы экрана? А то скорость сравнения всех пикселей через ScanLine в TBitMap меня не удовлетворила... jmp $ ; Happy End! The Cake Is A Lie. |
#10
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
#11
|
||||
|
||||
Но ведь в таком случае если открыто одно окно на весь экран, то будет перекидываться весь экран, даже если в реале ничего или почти ничего не изменилось...
jmp $ ; Happy End! The Cake Is A Lie. |
#12
|
||||
|
||||
ну естественно, если окно видеоплеера распахнуто, то придется передавать весь экран. а так GetUpdateRgn в WM_PAINT скажет какой прямоугольник экрана изменился и каую область экрана нужно передать. например при перемещении окна по экрану будут передаваться только те области, которые появляются из под перемещаемого окна (WM_ERASEBKGND). при нажатии на кнопку только прямоугольник занимаемый кнопкой. при печати текста в поле ввода только прямоугольник поля ввода (WM_SETTEXT) и т.д. и т.п.
Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 21.12.2010 в 16:41. |
#13
|
||||
|
||||
Благодарю
jmp $ ; Happy End! The Cake Is A Lie. |
#14
|
|||
|
|||
Цитата:
Никогда не работал с win api, поэтому задам глупый вопрос) С помощью GetUpdateRgn получаю результат в hrng, как его сохранить в bitmap? Гугл не помог ... |
#15
|
||||
|
||||
через GetUpdateRgn получаем хэндл региона для обновления, потом вызываем GetRegionData и получаем прямоугольник, далее копируем этот прямоугольник BitBlt. ну это так, в кратце)
Пишу программы за еду. __________________ |