2

我已经看到很多问题询问如何绘制透明图像,但我的情况恰恰相反。我有一个TPicture加载任何文件类型的地方,包括PNG. 然后我直接在 a的画布中阅读TPicture.Graphic和调用。但是,在绘制图像时,它会继承原始图像的透明度。DrawTBitmapPNG

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

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

现在的问题是我正在绘制的画布已经有一个图像,并且这个 PNG 被绘制在它的一部分上。当 PNG 具有透明背景时,通常显示为白色。但是,由于它直接在画布上绘制透明图形,因此这些区域保持透明。

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

4

1 回答 1

6

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

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

于 2013-02-01T22:10:20.913 回答