Вот ещё шустрый пример из рабочего проекта:
Типы данных:
Код:
TRGB32 = packed record
B, G, R, A: Byte;
end;
TRGB32Array = array [0..PixelMax-1] of TRGB32;
PRGB32 = ^TRGB32Array;
pPixelArray = ^TPixelArray;
TPixelArray = array [0..PixelMax-1] of TRGBTriple;
Код:
procedure CreateBitmapFromArr(w,h: integer; var bmp: TBitmap);
var
i,j,dd: integer;
Pixels: pPixelArray;
function RGBtoWinRGB(col: TRGB32):TRGBTriple;
begin
result.rgbtBlue:=col.B;
result.rgbtGreen:=col.G;
result.rgbtRed:=col.R;
end;
begin
dd:=0;
bmp.PixelFormat := pf24bit;
bmp.Width := w;
bmp.Height := h;
for i := Bmp.Height - 1 downto 0 do
begin
Pixels:=Bmp.ScanLine[i];
for j :=Bmp.Width - 1 downto 0 do
begin
Pixels[j]:=RGBToWinRGB(FData^[dd]);
inc(DD);
end;
end;
end;
FData является переменной типа TRGB32.