![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
прямой доступ к памяти 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]подниму ветку - вдруг кто-то делал такое.....