Да, я думаю, что это легко.
Например, этот код установит непрозрачность на ноль (то есть прозрачность на 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;
Это создаст альфа-канал с линейным градиентом, от полной прозрачности (альфа = 0) до полной непрозрачности (альфа = 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.