![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CreateDIBSection [D6, Win2k]
alxx © (2003-02-13 11:21:00)Если не трудно, не могли бы вы мне дать минимальный пример использования этой функции? Например, создать 100х100х16bit, заполнить случайными точками и вывести на форму. А то я тону просто в тех примерах, которые есть у меня.
i-C3H7OH (2003-02-14 14:26:00) [1]а можно рисовать и средствами GDI
просто делаем SelectObject на MemDC и вперед. должно работать.
никаких (S)GetBitmapBits не надо (это чтоб достать массив пкселей DDB)
это же DIB-секции, а не DIB. пример - исходники FastLIB
alxx (2003-02-14 14:10:00) [2]Спасибо за помощь.
MBo (2003-02-14 14:03:00) [3]Про устаревшие - написано в хелпе. Видимо, потому, что не позволяют кучу параметров задавать, а с другой стороны - писать меньше :)
alxx (2003-02-14 13:50:00) [4]Понятно.
А как же в MFC метод GetBitmapBits у CBitmap? Он устаревший или его просто переименовывать не хотят?
MBo (2003-02-14 13:38:00) [5]GetDiBits/SetDiBits
Get/SetBitmapBits тоже подойдет, но они рассмтриваются как устаревшие функции
alxx (2003-02-14 13:33:00) [6]Мне нужно и то и другое. Я так понял, что следует рисовать на DC, потом делать что-то вроде GetBits, рисовать на ней битово и делать SetBits. Правильно?
Похоже GetBitmapBits подойдет.
MBo (2003-02-14 12:41:00) [7]>Как бы теперь GDI функциями на ней что-нибудь нарисовать
????
Зачем тогда DibSection делал?
GDI функции рисуют на контексте устройства.
В куске памяти рисуй сам.
alxx (2003-02-14 10:46:00) [8]Как бы теперь GDI функциями на ней что-нибудь нарисовать?
alxx (2003-02-14 10:25:00) [9]Спасибо!
Я попробовал так, и вроде бы работает:
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);
MBo (2003-02-13 18:33:00) [10]заполни структуру TBitmapInfo, вызови функцию, полученный указатель - на блок памяти, который заполни нужными значениями.
SetDiBitsToDevice
StretchDiBits