【问题标题】:Firemonkey PNG to bitmapFiremonkey PNG到位图
【发布时间】:2015-06-10 22:28:33
【问题描述】:

在 firemonkey xe5 中,当我将透明的 PNG 图像保存到位图中时,它的透明度变为黑色。我怎样才能变成白色?

我只是使用:

Image1.bitmap.loadfromfile('IMG.png');
image1.bitmap.Savetofile('image.BMP');

【问题讨论】:

    标签: delphi bitmap firemonkey


    【解决方案1】:

    这不是一个完整的解决方案,但可以帮助您入门。您需要调整 A、R、G、B 值以获得所需的值。

    procedure ApplyNoAlphaEdge(ABitmap: TBitmap; OpacityThreshold: integer);
    var
      bitdata1: TBitmapData;
      I: integer;
      J: integer;
      C: TAlphaColor;
    begin
      if (ABitmap.Map(TMapAccess.maReadWrite, bitdata1)) then
        try
          for I := 0 to ABitmap.Width - 1 do
            for J := 0 to ABitmap.Height - 1 do
            begin
              begin
                  {$IF DEFINED(VER270) OR DEFINED(VER280) OR DEFINED(VER290)}
                  C := PixelToAlphaColor(@PAlphaColorArray(bitdata1.Data)
                  [J * (bitdata1.Pitch div PixelFormatBytes[ABitmap.PixelFormat])
                   + 1 * I], ABitmap.PixelFormat);
                  {$ELSE}
                  C := PixelToAlphaColor(@PAlphaColorArray(bitdata1.Data)
                  [J * (bitdata1.Pitch div GetPixelFormatBytes(ABitmap.PixelFormat))
                   + 1 * I], ABitmap.PixelFormat);
                  {$ENDIF}
                   if TAlphaColorRec(C).A<OpacityThreshold then
                    begin
                      TAlphaColorRec(C).A := 0;
                      TAlphaColorRec(C).R := 255;
                      TAlphaColorRec(C).G := 255;
                      TAlphaColorRec(C).B := 255;
    
                  {$IF DEFINED(VER270) OR DEFINED(VER280) OR DEFINED(VER290)}
                      AlphaColorToPixel(C, @PAlphaColorArray(bitdata1.Data)
                        [J * (bitdata1.Pitch div PixelFormatBytes[ABitmap.PixelFormat])
                         + 1 * I], ABitmap.PixelFormat);
                  {$ELSE}
                      AlphaColorToPixel(C, @PAlphaColorArray(bitdata1.Data)
                        [J * (bitdata1.Pitch div GetPixelFormatBytes(ABitmap.PixelFormat))
                         + 1 * I], ABitmap.PixelFormat);
                  {$ENDIF}
                    end;
              end;
            end;
        finally
          ABitmap.Unmap(bitdata1);
        end;
    end;
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2021-08-28
    • 2014-07-27
    相关资源
    最近更新 更多