Delphi XE7上的数组位图

时间:2015-04-16 12:39:34

标签: delphi bitmap delphi-xe7

我写的程序在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;

但它不起作用,数组充满了零。

位图:

1

1 个答案:

答案 0 :(得分:1)

你在评论中说:

  

我已经重新编译了代码,它更好,它扫描.bmp但返回像素0的反向值 - 白色,255黑色。

这是因为8bpp位图使用调色板来识别颜色。在您的调色板中,0标识为白色,255标识黑色。可以从你提出的证据中推断出那么多。但是,在检查.bmp文件中的颜色表时也很明显。

调色板是一张颜色表。该表有256个条目。位图中的每个像素都是表格的索引。

如果要获取每个像素的RGB颜色,则需要先读取调色板颜色表,然后使用Scanline值作为该表的索引。