繁体   English   中英

修改 TPngImage 的每像素 alpha 数据

[英]Modify per-pixel alpha data for TPngImage

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

是的,我认为这很容易。

例如,此代码将图像上半部分的每个像素的不透明度设置为零(即透明度为 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 值(不透明度),以字节为单位。

你可以使用这样的东西:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM