2011-06-14 79 views

回答

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 = 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值(不透明度),作为一个字节。

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;