我想用 alpha 透明矩形和 alpha 透明图像绘制相当复杂的图像。 Mitov 有 GDI+ 包装器,但它似乎不支持 32 位 BMP 文件,而且它会重新缩放它们,而且文档很糟糕。BMP 比 PNG 快得多,所以我想使用它们。 有 GDI+ 的 SynGDI 包装器,但它看起来非常基本,并且没有相关文档。GDI 也有这个技巧:
procedure DrawAlphaAPI(Source: TBitmap; Destination: TCanvas;
const X, Y: Integer; const Opacity: Byte = 255);
var BlendFunc: TBlendFunction;
begin
BlendFunc.BlendOp := AC_SRC_OVER;
BlendFunc.BlendFlags := 0;
BlendFunc.SourceConstantAlpha := Opacity;
if Source.PixelFormat = pf32bit then
BlendFunc.AlphaFormat := AC_SRC_ALPHA
else
BlendFunc.AlphaFormat := 0;
Windows.AlphaBlend(Destination.Handle, X, Y, Source.Width, Source.Height,
Source.Canvas.Handle, 0, 0, Source.Width, Source.Height, BlendFunc);
end;
但是当我用 Opacity = 255 调用它时,它会不正确地绘制 32 位位图(就像它们在应该完全透明的地方是半透明的)。我不想使用 Scanline 使像素透明,因为这样绘制所有透明矩形太复杂了。此外,我认为 GDI+ 在现代计算机上应该更快,对吗?
所以问题是:如何轻松绘制 alpha 透明矩形和位图(无需大量代码)?
首选 Delphi:7。我也有 2005 和 XE3,但由于 7 是速度恶魔,我最希望从 7 开始工作。