我已经看过许多问题,询问如何绘制透明图像,但我的情况恰恰相反。我有TPicture
我加载任何文件类型,包括PNG
。然后我阅读TPicture.Graphic
并直接在Draw
的画布中调用TBitmap
。但是,在绘制图像时,它会延续原始PNG
图像的透明度。
目前的代码很简单,只是......
MyPicture.LoadFromFile(SomeFilename);
MyBitmap.Canvas.StretchDraw(SomeRect, MyPicture.Graphic);
现在的问题是我正在绘制的画布已经有了一个图像,而这个PNG正在绘制它的一部分。当PNG具有透明背景时,通常它看起来是白色的。但是,由于它直接将透明图形绘制到画布上,因此它会使这些区域保持透明。
如果仅使用画布绘制方法,如何在没有原始透明度的情况下将PNG
图形直接绘制到画布上?我不想创建太多图形对象并绘制太多次,因此我上面只有2行代码。我希望有一种方法可以像BitBlt
那样用一些特殊的机制来实现这个目的。
答案 0 :(得分:6)
Delphi XE2中预先构建的唯一方法有缺陷,无法正常工作。相反,将空白或任何您想要的背景绘制到空白画布上。然后在顶部绘制透明图像。
如果您没有绘制空白画布,可以为您计划绘制png的区域调用位图画布的FillRect
方法。