【问题标题】:Modify per-pixel alpha data for TPngImage修改 TPngImage 的每像素 alpha 数据
【发布时间】:2011-09-15 00:50:06
【问题描述】:

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

【问题讨论】:

    标签: image delphi png alpha


    【解决方案1】:

    是的,我认为这很容易。

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

    【讨论】:

      【解决方案2】:

      你可以这样使用:

      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;
      

      【讨论】:

        猜你喜欢
        • 2012-02-17
        • 1970-01-01
        • 2015-01-08
        • 1970-01-01
        • 1970-01-01
        • 2011-02-24
        • 1970-01-01
        • 2014-11-26
        • 1970-01-01
        相关资源
        最近更新 更多