Gui*_*ill 1 delphi png transparency alpha-transparency delphi-xe3
我有TImage一个PNGImage带有 Alpha 通道的预加载位图(按单位):
主题是大绿恐龙。我希望能够在运行时将其 Alpha 级别更改为范围内的任何值。像 127,他看起来像这样:
按照另一个类似问题的答案,我几乎觉得在皮肤上它会起作用。但这是 Alpha Level 0 的结果,例如:

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

| 归档时间: |
|
| 查看次数: |
4464 次 |
| 最近记录: |