我写的程序在XE7上将位图重写为数组。我写了这段代码:
PROCEDURE BitmapToArray(var inBitmap : TBitMap;
var outArray : TIntegerDynArray_2D);
var
x : integer;
y : integer;
P : PByteArray;
begin
SetLength(outArray,0,0);
SetLength(outArray, inBitmap.Height, inBitmap.Width);
for y := 0 to inBitmap.Height-1 do
begin
P := inBitmap.ScanLine[y];
for x := 0 to inBitmap.Width-1 do
begin
outArray[y,x]:=P[x];
end;
end;
end;
但它不起作用,数组充满了零。
位图:
答案 0 :(得分:1)
你在评论中说:
我已经重新编译了代码,它更好,它扫描.bmp但返回像素0的反向值 - 白色,255黑色。
这是因为8bpp位图使用调色板来识别颜色。在您的调色板中,0
标识为白色,255
标识黑色。可以从你提出的证据中推断出那么多。但是,在检查.bmp文件中的颜色表时也很明显。
调色板是一张颜色表。该表有256个条目。位图中的每个像素都是表格的索引。
如果要获取每个像素的RGB颜色,则需要先读取调色板颜色表,然后使用Scanline
值作为该表的索引。