![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 метра. в БМП формате. Если сеть поддерживает, можно поступить так же. Или же разбираться с форматами видео, где кодируются только изменения. |
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
|||
|
|||
|
Цитата:
При разрешении 1080х960 скрин сжимается за 200мсек, т.е. при наилучшем раскладе можно добиться фпс 5. Насчет квадрата, интересно, но если я открою окно? Или разверну? Надо обновить весь экран, а не 300х300, либо каждые 3-4 сек слать фулл скрин. |
|
#6
|
|||
|
|||
|
Цитата:
|
|
#7
|
||||
|
||||
|
насчет квадрата - я транслировал просто квадрат вокруг мышки. Типа обновляется то, где мышь. Если открылось окно - то надо помахать курсором по экрану чтоб все обновить
Не слишком удобно, но все же лучше чем ничего.Лучше всего отлавливать на экране изменения, как и сказал Admin. Сжимать можно во все, что угодно, но если слать небольшие куски экрана где были изменения, то думаю ЖПГ будет не самым эффективным. Более того, компьютерные скрины в ЖПГ вообще сжимаются не лучшим образом. |
|
#8
|
||||
|
||||
|
Джпег идет с потерей качества.
А так берешь свой маленькой изменненный кусок экрана в виде BMP, сжимаешь Zlib и пересылаешь, и так все изменения. Вот простой пример, в виде бинарников: Remote Test. |
|
#9
|
||||
|
||||
|
Вспомнил свою старую прогу, решил переделать ее
![]() Посоветуйте пожалуйста: как лучше всего фиксировать изменения полосы экрана? А то скорость сравнения всех пикселей через ScanLine в TBitMap меня не удовлетворила... |
|
#10
|
||||
|
||||
|
Цитата:
|
|
#11
|
||||
|
||||
|
Но ведь в таком случае если открыто одно окно на весь экран, то будет перекидываться весь экран, даже если в реале ничего или почти ничего не изменилось...
|
|
#12
|
||||
|
||||
|
ну естественно, если окно видеоплеера распахнуто, то придется передавать весь экран. а так GetUpdateRgn в WM_PAINT скажет какой прямоугольник экрана изменился и каую область экрана нужно передать. например при перемещении окна по экрану будут передаваться только те области, которые появляются из под перемещаемого окна (WM_ERASEBKGND). при нажатии на кнопку только прямоугольник занимаемый кнопкой. при печати текста в поле ввода только прямоугольник поля ввода (WM_SETTEXT) и т.д. и т.п.
Последний раз редактировалось NumLock, 21.12.2010 в 16:41. |
|
#13
|
||||
|
||||
|
Благодарю
![]() |
|
#14
|
|||
|
|||
|
Цитата:
Никогда не работал с win api, поэтому задам глупый вопрос) С помощью GetUpdateRgn получаю результат в hrng, как его сохранить в bitmap? Гугл не помог ... |
|
#15
|
||||
|
||||
|
через GetUpdateRgn получаем хэндл региона для обновления, потом вызываем GetRegionData и получаем прямоугольник, далее копируем этот прямоугольник BitBlt. ну это так, в кратце)
|