Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание маски изменения экрана, получение маски изменения экрана 
V
    Опции темы
newinfo2005
Дата 27.7.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 12.6.2008
Где: где-то тут

Репутация: нет
Всего: нет



Создаю вторую ветку по теме скрин экрана.
В этот раз хочеться реализовать такой алгоритм, я получаю изменения экрана посредством SRCINVERT через BitBlt. но там только черным цветом те пиксели, которые остались такими же между двумя скринами, ну, а изменившиеся другим цветом, так вот по этим изменениям хочеться получить маску (т.е. не черные, или черные цвета поменять на белый цвет и совместить со вторым скрином экрана, чтобы получить скрин, а на нем белым цветом или черным, были неизмененые места), потому что только инвертом не получается получить скрин экрана. Ну, а дальше сжать в формат пнг и отправлять по сети, что очень получиться быстро.
Спасибо за помощь smile
PM MAIL ICQ   Вверх
VICTAR
Дата 28.7.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 2
Всего: 80



Можно еще раз?  smile 
PM MAIL   Вверх
newinfo2005
Дата 28.7.2008, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 12.6.2008
Где: где-то тут

Репутация: нет
Всего: нет



VICTAR,  гыыы, так и знал , что меня никто не поймет  smile 
вообщем сделай скрин , потом измени что-нибудь на нем, потом сделай второй скрин, сделай BitBlt с параметром SRCINVERT между ними, увидишь, что всё черное будут неизменившиеся части, отсюдова хочу сделать маску (т.е. к пример белые цвета будут те, которые не являются черным цветом) и наложить параметром SRCPAINT на второй скрин и получиться скрин только с измененными частями экрана, если ужать в PNG   формат, будет очень маленький размер
PM MAIL ICQ   Вверх
newinfo2005
  Дата 30.7.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 12.6.2008
Где: где-то тут

Репутация: нет
Всего: нет



гык, проблема решилась))
PM MAIL ICQ   Вверх
VICTAR
Дата 30.7.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 2
Всего: 80



дык хоть бы рассказал что да как  smile 
PM MAIL   Вверх
newinfo2005
  Дата 30.7.2008, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 12.6.2008
Где: где-то тут

Репутация: нет
Всего: нет



VICTAR,  да никак. ступил, вспомнил логику.
делаю инверт и пересылаю сжатым результаты по сети клиенту, тот делает на свой текущий скрин ещё инверт и получается второй скрин такой же как и на сервере.
Код

var

_hdc1,dsd:HDC;
_hbm1:HBitmap;
p:TPNGObject;
m:TMemoryStream;
begin
bm:=TBITMAP.Create;
bm.Width:=screen.Width ;
bm.Height:=screen.Height ;
m:=TMemoryStream.Create;

dsd:=getDC(0);
_hdc1:=createcompatibledc(dsd);   //second screen


_hbm1:=createcompatiblebitmap(dsd,screen.Width , screen.Height );

selectobject(_hdc1,_hbm1);
b1:=BitBlt(_hdc1, 0, 0,screen.Width ,screen.Height ,dsd, 0, 0,
        $40000000        or
       SRCCOPY        );
p:=TPNGObject.Create;
if b2 = false then begin
BitBlt(_hdc2, 0, 0,screen.Width ,screen.Height ,_hdc1, 0, 0,
        $40000000        or
       SRCCOPY        );

BitBlt(hdc1, 0, 0,screen.Width ,screen.Height ,_hdc1, 0, 0,
       $40000000        or
      SRCINVERT        );



       BitBlt(bm.Canvas.Handle, 0, 0,screen.Width ,screen.Height ,hdc1, 0, 0,
//        $40000000        or
       SRCCOPY        );
       p.Assign(bm);
       m.Position:=0;
       p.SaveToStream(m);
       b2:=true;

       end
       else
       begin
       BitBlt(hdc1, 0, 0,screen.Width ,screen.Height ,_hdc1, 0, 0,
        $40000000        or
       SRCCOPY        );

       BitBlt(_hdc2, 0, 0,screen.Width ,screen.Height ,_hdc1, 0, 0,
       $40000000        or
       SRCINVERT        );
       BitBlt(bm.Canvas.Handle, 0, 0,screen.Width ,screen.Height ,_hdc2, 0, 0,
//        $40000000        or
       SRCCOPY        );
       b2:=false;
       p.Assign(bm);
       m.Position:=0;
       p.SaveToStream(m);
       end;
m.free;
p.Free;
deleteobject(_hbm1);
deletedc(_hdc1);
releaseDC(0,dsd);
bm.Destroy;

в b2 - первоначально false , фишка реализации smile
некоторые переменные глобальные
в hdc1 - самый первый скрин сделанный в начале работы, все работает на отлично, условно, зденсь нету пересыла по сети части и все равно грузит процессор, однако решить эту проблему сможет миррор драйвер, я уже придумал, как нужно в нем реализовать ту часть, где он должен пересылать программе координаты изменных областей, что максимально сожмет нагруженность на сжатие данных и делание скринов, щас курю как отослать быстро сообщение о координатах и принять в программе.
PM MAIL ICQ   Вверх
Qu1nt
Дата 30.7.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



Оформление кода - жуть smile 
PM MAIL   Вверх
newinfo2005
Дата 30.7.2008, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 12.6.2008
Где: где-то тут

Репутация: нет
Всего: нет



Qu1nt,  курю пластмассу, когда пишу код  smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0871 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.