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

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

Bitmap


Зинтересованный ©   (2002-10-18 05:05:00) 

Подскажите как гарантировано создать 24-битный битмап. В VCL этим заведует свойство PixelFormat. А как такое проделать средствами API? Если возможно, то хоть кусочек кода.


SPeller   (2002-10-19 14:21:00) [1]


> Заинтересованный (19.10.02 08:01)

Ну тогда, как уже сказали, DIB


Заинтересованный   (2002-10-19 08:01:00) [2]

>SPeller © (18.10.02 14:39)
Я это прекрасно знаю. Меня интересовал способ получения именно независимого битмапа.


MBo   (2002-10-18 15:01:00) [3]

>SPeller
Естественно, при этом же DDB (Device-Dependent Bitmap) создается. А вот для DIB что угодно задать можно


SPeller   (2002-10-18 14:39:00) [4]

Вообще, разрядность цвета битмапа при создании его через CreateCompatibleBitmap зависит от свойств DC, для которого он создаётся. Если взять DC от CreateCompatibleDC( 0 ) то битмап будет монохромным, а если DC рабочего стола, то глубина цвета будет соответствовать установленной в настройках монитора.


Заинтересованный   (2002-10-18 12:15:00) [5]

Спасибо. Все получилось.


MBo   (2002-10-18 09:03:00) [6]

Тогда делай CreateDibSection


Заинтересованный   (2002-10-18 08:23:00) [7]

Попробую уточнить.
bmp := CreateCompatibleBitmap(DC, 200, 50);
tmpDC := CreateCompatibleDC(DC);
SelectObject(tmpDC, bmp);
BitBlt(tmpDC, 0, 0, 200, 50, ScreenDC, 40, 110, SRCCOPY);

SemiTransparent(bmp, 120);

BitBlt(ScreenDC, 40, 110, 200, 50, tmpDC, 0, 0, SRCCOPY);
TransparentBmp(ScreenDC, m_bmpPause, 75, 114);
DeleteObject(bmp);
DeleteDC(tmpDC);

Данный код прекрасно работает за исключением того, что зависим от настроек монитора. Попробовал нижеуказанный код
bmp := CreateBitmap(200, 50, 3, 8, NIL);
tmpDC := CreateDC("DISPLAY", NIL, NIL, NIL);
SelectObject(tmpDC, bmp);
BitBlt(tmpDC, 0, 0, 200, 50, ScreenDC, 40, 110, SRCCOPY);

DrawShadow(bmp, 120);

BitBlt(ScreenDC, 40, 110, 200, 50, tmpDC, 0, 0, SRCCOPY);
TransparentBmp(ScreenDC, m_bmpPause, 75, 114);
DeleteObject(bmp);
DeleteDC(tmpDC);

но здесь получилась полная ахинея. Первый BitBlt копирует картинку на Десктоп. Конечно создал канвас от дисплея туда и выводится. Но как сделать нормально. Суть проста. Вырезать с битмапа кусок изображения, обработать и положить обратно. Оригинальный битмап 24-битный, а вырезанный зависит от настроек монитора. Хотелось бы вырезать в том же формате, что и оригинал.


MBo   (2002-10-18 05:52:00) [8]

Например, CreateBitmap(100,100,3,8,AdressOfPixelArray)


Наверх

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