修改TPngImage的每像素alpha数据

时间:2011-06-14 20:26:47

标签: image delphi png alpha

我可以直接修改TPngImage的每像素alpha数据,从某处加载它并将其绘制到某处吗?如果是这样,怎么样?感谢。

2 个答案:

答案 0 :(得分:8)

是的,我觉得这很容易。

例如,此代码会在图像上半部分的每个像素上将不透明度设置为零(即透明度为100%):

var
  png: TPNGImage;
  sl: PByteArray;

...

for y := 0 to png.Height div 2 do
begin
  sl := png.AlphaScanline[y];
  FillChar(sl^, png.Width, 0);
end;

这将形成一个线性渐变alpha通道,从完全透明(alpha = 0)到完全不透明(alpha = 255)从左到右:

for y := 0 to png.Height do
begin
  sl := png.AlphaScanline[y];
  for x := 0 to png.Width - 1 do
    sl^[x] := byte(round(255*x/png.Width));
end;

基本上,我想说的是

(png.AlphaScanline[y]^)[x]

是第y行和第x行像素的alpha值(不透明度),以字节为单位。

答案 1 :(得分:3)

您可以使用以下内容:

for Y := 0 to Image.Height - 1 do begin
  Line := Image.AlphaScanline[Y];
  for X := 0 to Image.Width - 1 do begin        
      Line[X] := ALPHA        
  end;
end;