2011-06-14 76 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;