Форум: "Media";
Текущий архив: 2015.05.03;
Скачать: [xml.tar.bz2];
ВнизПреобразовать картинку в массив байтов RGB Найти похожие ветки
← →
StriderMan (2009-03-03 16:00) [0]Есть 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;
Кто знает, как это сделать по-нормальному без переливания из пустого в порожнее? Или закэшировать сразу все картинки по массивам?
← →
MBo © (2009-03-03 16:08) [1]функция GetDiBits
если картинка 32-битная, то можно перевести ее предварительно в 24-битный формат, либо использовать ScanLine для выделения только цветовых байтов.
← →
StriderMan (2009-03-03 16:21) [2]
MBo © (03.03.09 16:08) [1]
> функция GetDiBits
Это все равно сначала в TBitMap надо слить все?
← →
MBo © (2009-03-03 16:37) [3]>Это все равно сначала в TBitMap надо слить все?
Да.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2015.05.03;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.002 c