在没有透明度的情况下将PNG图形绘制到画布?

时间:2013-02-01 22:00:33

标签: delphi drawing png delphi-xe2 transparent

我已经看过许多问题,询问如何绘制透明图像,但我的情况恰恰相反。我有TPicture我加载任何文件类型,包括PNG。然后我阅读TPicture.Graphic并直接在Draw的画布中调用TBitmap。但是,在绘制图像时,它会延续原始PNG图像的透明度。

目前的代码很简单,只是......

MyPicture.LoadFromFile(SomeFilename);
MyBitmap.Canvas.StretchDraw(SomeRect, MyPicture.Graphic);

现在的问题是我正在绘制的画布已经有了一个图像,而这个PNG正在绘制它的一部分。当PNG具有透明背景时,通常它看起来是白色的。但是,由于它直接将透明图形绘制到画布上,因此它会使这些区域保持透明。

如果仅使用画布绘制方法,如何在没有原始透明度的情况下将PNG图形直接绘制到画布上?我不想创建太多图形对象并绘制太多次,因此我上面只有2行代码。我希望有一种方法可以像BitBlt那样用一些特殊的机制来实现这个目的。

1 个答案:

答案 0 :(得分:6)

Delphi XE2中预先构建的唯一方法有缺陷,无法正常工作。相反,将空白或任何您想要的背景绘制到空白画布上。然后在顶部绘制透明图像。

如果您没有绘制空白画布,可以为您计划绘制png的区域调用位图画布的FillRect方法。