Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

прямой доступ к памяти device context'а...


wicked ©   (2004-07-22 11:56:00) 

сори, если сумбурно звучит тема...
необходимо поиметь указатель на область памяти, используемой GDI для отображения всего того, что рисуется в определенном device context'е....
пока дошел до такого варианта (псевдокод):

dc = GetDC(<handle окна>);
mem_dc = CreateCompatibleDC();
mem_bm = CreateCompatibleBitmap(); // создаем битмап в памяти

old_bm = SelectObject(mem_dc, mem_bm);
BitBlt(mem_dc, <coords...>, dc, <coords...>); // теперь изображение dc находится в mem_bm
SelectObject(mem_dc, old_bm);

LPBITMAPINFO lpbm = alloc();
GetDIBits(dc, mem_bm, <coords>, NULL {указатель на биты изображения}, lpbm); // получаем параметры битмапа
bit_size = <подсчет кол-ва байтов для битов изображения>;
bits = alloc(bit_size);

// получаем копию битмапа в наш блок памяти
GetDIBits(dc, mem_bm, <coords>, bits, lpbm);
// тут рисуем в bits всё, что угодно
// возвращаем изображение в блоке памяти назад в битмап
SetDIBits(dc, mem_bm, <coords>, bits, lpbm);

// копируем битмап на активный dc окна
old_bm = SelectObject(mem_dc, mem_bm);
BitBlt(dc, <coords...>, mem_dc, <coords...>);
SelectObject(mem_dc, old_bm);
// подметаем за собой


как видно из примера, делается аж две копии изображения оконного device context'а, чего хотелось бы избежать...
какие будут соображения?...
наперед спасибо...


wicked   (2004-07-23 18:37:00) [1]

а вот, что требовалось - http://www.rsdn.ru/?Forum/Message/81784.htm
может кому надо будет...

ЗЫ монолог такой нехилый вышел.... :)


wicked   (2004-07-23 11:37:00) [2]

последний раз подниму ветку... а вдруг?...


wicked   (2004-07-22 19:41:00) [3]

подниму ветку - вдруг кто-то делал такое.....


Наверх

Титульная страница Поиск, карта сайта Написать письмо