Вот ещё шустрый пример из рабочего проекта:
Типы данных:
	Код:
	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.