Re[3]: Передача изображения по сети
От: TATAPuH США  
Дата: 31.07.08 05:57
Оценка:
Здравствуйте, CastleMaster, Вы писали:

CM>как я делал — делал скриншот всего экрана и копался в битах чтобы выделить

CM>изменившийся прямоугольник. Потом приходилось переснимать скриншот изменившийся
CM>части — и пересылать его — мне кажется два скриншота подрят будут подтормаживать систему.

во первых вопрос
у меня почемуто такое ощущение, что клиентом отсылающим скриншот являтеся само приложение ? тоесть оно как бы само себя скриншотит и отсылает админской части ?
если да то маленький совет

в главной форме отслеживайте все виндовые сообщения через
protected override void WndProc(ref Message m)

определяйте какому "окну" дочернему элементу фашей формы предназночалось данное сообщение
(всяческие mouseOver можно пропускать — хотя можно и отсылать админу и симулировать движение курсора — если это не обходимо)

в итоге вы можете пропустив сообщение через фильтр который решит что данное сообщение возникло после перерисовки дочернего элемента
вычислить по хендлу элемента его размер и позицию на экране
"отскриншотить" только заданную область
и именно её отправить админу

я подозреваю что большая часть времени у вас как раз сьедается на попиксельное сравнение и вычисление изменившейся секции

(при описанном выше подходе скорее всего возникнут проблемы с меню и контекстным меню)

впрочем вам стоит копать в сторону хуков
смотрите на класс System.Windows.Forms.NativeWindow
в мсдн есть примеры

фактически вам надо просто перехватить WM_PAINT и ещё парочку сообщений для всех hwnd винды
позволить системе отработать сообщение
и в случае если обьект вам интересен — принадлежит вашей апликации
получить баундинг отрисовавшевося обьекта — и отправить его админу

а уж сжатие картинки или её грейскейл это всеголиш косметика

и учтите, не все форматы "одинаково полезны" — хорошо жмутся
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.