我想使用带有alpha透明矩形和alpha透明图像的复杂图像。 Mitov的GDI+包装器,但它似乎不支持32位BMP文件,而且会重新缩放它们,文档也很糟糕。BMP比PNG快得多,所以我想使用它们。GDI +的SynGDI包装器,但它似乎非常基本,并且没有为其编写文档。还有这个GDI的技巧:
但是当我将Opacity设置为255时,它不能正确地绘制32位图像(在应该完全不透明的地方会有一些半透明的效果)。我不想使用Scanline来使像素透明,因为这样绘制所有透明矩形会太复杂。另外,我认为GDI+在现代计算机上应该更快,我是对的吗?
所以问题是:如何轻松地绘制alpha透明的矩形和位图(不需要大量代码)?
首选Delphi版本:7。我也有2005和XE3,但由于7是速度恶魔,我最希望的是从7开始向上工作的东西。
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开始向上工作的东西。
此包装器
,您可以编写如下代码
,看起来相当复杂,但您需要知道您可以使用该颜色矩阵修改颜色调整
,而我正在加载一个文件以进行Alpha混合(例如,您可以从传递的TBitmap
对象创建GPBitmap
)。 - TLama