【发布时间】:2021-03-20 15:01:07
【问题描述】:
我写了一个名为gray_scale 的procedure,它假设有一个输入TImage 组件,将它包含的图像转换为灰度,然后在同一个TImage 组件中打印它。它的问题是它打印黑色图像。我的代码在下面,请注意我创建了一个名为img2: TPicture 的局部变量,其目的是充当过程输入和输出之间的中间阶段。
procedure gray(var img1: TImage);
var
i,j: Integer;
y: integer;
color: TColor;
img2: TPicture;
begin
i := 0; j := 0;
img2 := TPicture.create;
img2.Bitmap.Width:= img1.width;
img2.Bitmap.Height:= img1.height;
for i := 0 to img1.width do begin
for j := 0 to img1.height do begin
y:= trunc((255 * luminance(img1,i,j)));
color := RGBToColor(byte(y), byte(y), byte(y));
img2.Bitmap.Canvas.DrawPixel(i,j, TColorToFPColor(color));
end;
img1.Picture.Assign(img2);
end;
end;
【问题讨论】:
-
使用调试器,您是否检查过每个像素的颜色并不总是 0?
-
如果您使用支持 AlphaChannel 但未设置 AlphaChannel 的位图格式,您的输出正是您所期望的。我不熟悉 Lazarus 的默认设置,但如果您的 TPicture 使用 AlphaChannel 支持的格式,您将需要在每个像素上设置 AlphaChannel。
-
fpiette:颜色总是不为 0!
-
@MiqueasGamero - 你检查过 AlphaChannel - 对于任何 RGB 值,AlphaChannel 为 0 意味着没有绘制任何内容......在我看来就像你在这里看到的一样。
-
嗯,我会尽快检查 AlphaChannel,我会在这里更新。谢谢!
标签: delphi image-processing pascal freepascal lazarus