如何在 TImage 图形中启用 Alpha 调平?

Gui*_*ill 1 delphi png transparency alpha-transparency delphi-xe3

我有TImage一个PNGImage带有 Alpha 通道的预加载位图(按单位):

在此处输入图片说明

主题是大绿恐龙。我希望能够在运行时将其 Alpha 级别更改为范围内的任何值。像 127,他看起来像这样:

在此处输入图片说明

按照另一个类似问题的答案,我几乎觉得在皮肤上它会起作用。但这是 Alpha Level 0 的结果,例如:

在此处输入图片说明

所以,我的问题。有人可以知道如何改进答案的例行程序吗?或者知道另一种方法来实现第二张图片结果?请注意,我希望能够在运行时使用方法或您知道的任何其他方式更改此 Alpha Level 属性

先感谢您...

Ser*_*yuz 5

使用AlphaBlend,

var
  Png: TPngImage;
  Bmp: TBitmap;
  BlendFn: TBlendFunction;
begin

  // suppose you already have a master png
  Png := TPngImage.Create;
  Png.LoadFromFile(
      ExtractFilePath(Application.ExeName) + '\..\..\Attention_128.png');

  // construct a temporary bitmap with the image
  Bmp := TBitmap.Create;
  Bmp.Assign(Png);

  // prepare TImage for accepting a partial transparent image
  Image1.Picture.Bitmap.PixelFormat := pf32bit;
  Image1.Picture.Bitmap.AlphaFormat := afPremultiplied;
  Image1.Picture.Bitmap.Canvas.Brush.Color := clBlack;
  Image1.Picture.Bitmap.SetSize(Png.Width, Png.Height);

  // alpha blend the temporary bitmap to the bitmap of the image
  BlendFn.BlendOp := AC_SRC_OVER;
  BlendFn.BlendFlags := 0;
  BlendFn.SourceConstantAlpha := 128;  // set opacity here
  BlendFn.AlphaFormat := AC_SRC_ALPHA;

  winapi.windows.AlphaBlend(Image1.Picture.Bitmap.Canvas.Handle,
    0, 0, Image1.Picture.Bitmap.Width, Image1.Picture.Bitmap.Height,
    Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, BlendFn);

  // free temporary bitmap, etc.
  ..
Run Code Online (Sandbox Code Playgroud)


稍微评论一下,上面的代码在这里生成下面的图像(下面的图像是'Image1'): 在此处输入图片说明