Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.14;
Скачать: CL | DM;

Вниз

CreateDIBSection   Найти похожие ветки 

 
alxx ©   (2003-02-13 11:21) [0]

Если не трудно, не могли бы вы мне дать минимальный пример использования этой функции? Например, создать 100х100х16bit, заполнить случайными точками и вывести на форму. А то я тону просто в тех примерах, которые есть у меня.


 
MBo ©   (2003-02-13 18:33) [1]

заполни структуру TBitmapInfo, вызови функцию, полученный указатель - на блок памяти, который заполни нужными значениями.
SetDiBitsToDevice
StretchDiBits


 
alxx ©   (2003-02-14 10:25) [2]

Спасибо!
Я попробовал так, и вроде бы работает:


type TRGBArray = Array[0..1000] of RGBQUAD;
PRGBArray = ^TRGBArray;

var lpbmi : PBITMAPINFO;
lpTargetBits : Pointer;
DDC : HDC;
Bitmap : HBITMAP;
BB : PRGBArray;
i:Integer;
dwTargetHeaderSize : DWORD;
begin

dwTargetHeaderSize := sizeof ( BITMAPINFO ) + ( 1024 * sizeof( RGBQUAD ) );
GetMem (lpbmi, dwTargetHeaderSize);
lpbmi^.bmiHeader.biSize := sizeof (BITMAPINFOHEADER);
lpbmi^.bmiHeader.biWidth := 32;
lpbmi^.bmiHeader.biHeight := 32;
lpbmi^.bmiHeader.biPlanes := 1;
lpbmi^.bmiHeader.biBitCount := 32;
lpbmi^.bmiHeader.biCompression := BI_RGB;
lpbmi^.bmiHeader.biSizeImage := 0;
lpbmi^.bmiHeader.biXPelsPerMeter := 0;
lpbmi^.bmiHeader.biYPelsPerMeter := 0;
lpbmi^.bmiHeader.biClrUsed := 0;
lpbmi^.bmiHeader.biClrImportant := 0;

DDC := GetDC (0);
Bitmap := CreateDIBSection (DDC, lpbmi^, DIB_RGB_COLORS, lpTargetBits, 0, 0 );
BB:=lpTargetBits;

For i:=0 to 1023 do BB^[i]:=RGBQuad(random(255));

SetDiBitsToDevice(DDC,0,0,32,32,0,0,0,32, lpTargetBits,lpbmi^, DIB_RGB_COLORS);
StretchDIBits(DDC,0,0,128,128,0,0,32,32, lpTargetBits, lpbmi^,DIB_RGB_COLORS,SRCCOPY);


 
alxx ©   (2003-02-14 10:46) [3]

Как бы теперь GDI функциями на ней что-нибудь нарисовать?


 
MBo ©   (2003-02-14 12:41) [4]

>Как бы теперь GDI функциями на ней что-нибудь нарисовать
????
Зачем тогда DibSection делал?
GDI функции рисуют на контексте устройства.
В куске памяти рисуй сам.


 
alxx ©   (2003-02-14 13:33) [5]

Мне нужно и то и другое. Я так понял, что следует рисовать на DC, потом делать что-то вроде GetBits, рисовать на ней битово и делать SetBits. Правильно?

Похоже GetBitmapBits подойдет.


 
MBo ©   (2003-02-14 13:38) [6]

GetDiBits/SetDiBits

Get/SetBitmapBits тоже подойдет, но они рассмтриваются как устаревшие функции


 
alxx ©   (2003-02-14 13:50) [7]

Понятно.
А как же в MFC метод GetBitmapBits у CBitmap? Он устаревший или его просто переименовывать не хотят?


 
MBo ©   (2003-02-14 14:03) [8]

Про устаревшие - написано в хелпе. Видимо, потому, что не позволяют кучу параметров задавать, а с другой стороны - писать меньше :)


 
alxx ©   (2003-02-14 14:10) [9]

Спасибо за помощь.


 
i-C3H7OH ©   (2003-02-14 14:26) [10]

а можно рисовать и средствами GDI
просто делаем SelectObject на MemDC и вперед. должно работать.
никаких (S)GetBitmapBits не надо (это чтоб достать массив пкселей DDB)
это же DIB-секции, а не DIB. пример - исходники FastLIB



Страницы: 1 вся ветка

Текущий архив: 2003.04.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
7-44469
BJValentine
2003-02-18 17:05
2003.04.14
DLL


14-44327
ASDF1
2003-03-30 18:12
2003.04.14
Как отловить сообщение???


14-44347
Val
2003-03-25 16:18
2003.04.14
Реконструкция крушения американского вертолета


14-44448
Sils
2003-03-29 08:58
2003.04.14
святой набор


14-44364
Sredniy Medved
2003-03-31 12:04
2003.04.14
Проблемма с BreakPoint ами.