【发布时间】:2020-12-02 07:56:43
【问题描述】:
我想将像素从 BMP1 复制到 BMP2,但复制的图像有乱码。为什么?
注意:输入图片为pf8bit;
TYPE
TPixArray = array[0..4095] of Byte;
PPixArray = ^TPixArray;
procedure Tfrm1.CopyImage;
VAR
BMP1, BMP2: TBitmap;
y, x: Integer;
LineI, LineO: PPixArray;
begin
BMP1:= TBitmap.Create;
BMP2:= TBitmap.Create;
TRY
BMP1.LoadFromFile('test.bmp');
BMP2.SetSize(BMP1.Width, BMP1.Height);
BMP2.PixelFormat:= BMP1.PixelFormat;
for y:= 0 to BMP1.Height -1 DO
begin
LineI := BMP1.ScanLine[y];
LineO := BMP2.ScanLine[y];
for x := 0 to BMP1.Width -1 DO
LineO[x]:= LineI[x];
end;
//BMP2.SaveToFile('out.bmp');
imgOut.Picture.Assign(BMP2); //TImage
FINALLY
FreeAndNil(BMP2);
FreeAndNil(BMP1);
END;
end;
对于保存的图像,图形编辑器会显示“像素深度/颜色:索引,256 调色板”。
【问题讨论】:
-
您的实际问题是什么?为什么坚持复制扫描线而不使用
BMP2.Assign()? -
@AmigoJack - 简单:因为我需要对像素进行一些处理 :) 所以分配不起作用:)
-
下次将隐藏的细节添加到您的问题中,这样没有人会不必要地回答本可以立即避免的问题。另请注意,这样也不会复制源位图中的潜在 ICC 配置文件。
-
@AmigoJack - 如果我在我的代码和标题中明确提到了 ScanLine,这意味着我需要它。但无论如何,这种讨论毫无意义。 Andreas 已经提供了解决方案!