Оформил писанину с инициализацией в виде маленькой функции:
function GetDIBPointer(BitMap: TBitmap): Pointer;
var BInfo: TBitmapInfo;
begin
BInfo.bmiHeader.biSize := sizeof(BitmapInfo.bmiHeader);
BInfo.bmiHeader.biWidth := BitMap.Width;
BInfo.bmiHeader.biHeight := -BitMap.Height;
BInfo.bmiHeader.biPlanes := 1;
BInfo.bmiHeader.biBitCount := 32;
BInfo.bmiHeader.biCompression := BI_RGB;
BitMap.Handle := CreateDIBSection(BitMap.Canvas.Handle, BInfo, DIB_RGB_COLORS, GetDIBPointer, 0, 0);
//ZeroMemory(DIBPointer, Width * Height * 4);//раскоментировать, если надо обнулить биты рисунка
end;
Ну и собственно пример работы:
type
TBig = array[0..0] of Integer;
var bmp: Tbitmap;
bmpPointer: TPointer;
implementation
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
bmp:=TBitMap.Create();
bmp.width:=form1.width;
bmp.height:=form1.height;
bmpPointer:=GetDIBPointer(bmp);
Timer1.interval:=1;
end;
TForm1.Timer1Timer(Sender: TObject);
var x,y: integer;
begin
for x:=0 to bmp.width-1 do
for y:=0 to bmp.height-1 do // Цветной шум
TBig(bmpPointer^)[x+ y * bmp.width] := RGB(random(255),random(255),random(255));
form1.canvas.draw(0,0,bmp);
end;
Но вот беда, при компиляции в WinCE на экране ничего не происходит. Что не так? Функция CreateDIBSection в WinCE API присутствует.
Добавлено спустя 8 часов 27 минут 18 секунд:
А нет, где то у меня была ошибка. В wince все так же работает.