Есть ImageList с картинками. Нужно выдернуть из него картинку по заданному индексу, преобразовать в массив байтов RGB, причем на пиксел выделяется именно по 3 байта подряд.
Все это дело нужно передать потом в чужое API.
Пока сделал так:
type
TRGB = record
case integer of
1: (RGB: LongInt);
2: (B, G, R, O: BYTE);
end;
procedure ILIndexToPByte(const AImageList: TImageList; AIndex: integer; ADest: PByte; const AWidth, AHeight: integer);
var
x, y: integer;
rgb: TRGB;
bm: TBitMap;
begin
bm := TBitMap.Create;
try
AImageList.GetBitmap(AIndex, bm);
for x := 0 to min(bm.Width, AWidth) - 1 do
for y := 0 to min(bm.Height, AHeight) - 1 do
begin
rgb.RGB := ColorToRGB(bm.Canvas.Pixels[x, y]);
ADest^ := rgb.R;
inc(ADest);
ADest^ := rgb.G;
inc(ADest);
ADest^ := rgb.B;
inc(ADest);
end;
finally
bm.Free
end;
end;
Кто знает, как это сделать по-нормальному без переливания из пустого в порожнее? Или закэшировать сразу все картинки по массивам?