是的,我认为这很容易.
例如,此代码将在图像上半部分的每个像素上将不透明度设置为零(即透明度为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;
Run Code Online (Sandbox Code Playgroud)
这将形成一个线性渐变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;
Run Code Online (Sandbox Code Playgroud)
基本上,我想说的是
(png.AlphaScanline[y]^)[x]
Run Code Online (Sandbox Code Playgroud)
是第y行和第x行像素的alpha值(不透明度),以字节为单位.