我见过很多关于如何绘制透明图像的问题,但我的情况正好相反。我有一个可以加载任何文件类型的TPicture
,包括PNG
。然后我读取TPicture.Graphic
并在TBitmap
的画布中直接调用Draw
,然而,当绘制图像时,它继承了原始PNG
图像的透明度。
现在的代码非常简单,只是...
MyPicture.LoadFromFile(SomeFilename);
MyBitmap.Canvas.StretchDraw(SomeRect, MyPicture.Graphic);
现在的问题是,我要绘制的画布已经有了一个图像,而这个PNG正被绘制在它的一部分上。当PNG具有透明背景时,它通常显示为白色。但是,由于它直接在画布上绘制透明图形,因此它使这些区域保持透明。
只使用画布绘制方法时,如何在没有原始透明度的情况下将PNG
图形直接绘制到画布上?我不想创建太多的图形对象和绘制太多的次数,因此我只有上面两行代码的原因。我希望有一种方法可以用一些特殊的机制来做一些像BitBlt
这样的事情。
发布于 2013-02-01 22:10:21
在Delphi XE2中预建的唯一方法有一个缺陷,不能正常工作。取而代之的是,在空白画布上绘制空白或任何您想要的背景。然后在顶部绘制透明图像。
如果不是在空白画布上绘制,可以为计划绘制png的区域调用位图画布的FillRect
方法。
https://stackoverflow.com/questions/14655732
复制