2

透明な画像を描く方法を尋ねる多くの質問を見てきましたが、私の場合はまったく逆です。をTPicture含む任意のファイルタイプをロードする場所がありますPNG。次に、 aのキャンバスを直接読んTPicture.Graphicで呼び出します。ただし、画像が描画されると、元の画像の透明度が引き継がれます。DrawTBitmapPNG

現在のコードは非常に単純です...

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

問題は、私が描画しているキャンバスに既に画像があり、この PNG がその一部に描画されていることです。PNG の背景が透明な場合、通常は白く表示されます。ただし、透明なグラフィックをキャンバスに直接描画しているため、それらの領域は透明に保たれます。

PNGキャンバスの描画方法のみを使用して、元の透明度なしでグラフィックをキャンバスに直接描画するにはどうすればよいですか? あまりにも多くのグラフィック オブジェクトを作成して何度も描画したくないため、上記のコードは 2 行しかありません。BitBltこの目的のために、特別なメカニズムを使って何かできる方法があることを願っています。

4

1 に答える 1

6

Delphi XE2 にあらかじめ組み込まれている唯一の方法には欠陥があり、正しく機能しません。代わりに、空白または任意の背景を空白のキャンバスに描画します。次に、透明な画像を上に描画します。

空白のキャンバスに描画していない場合はFillRect、png を描画する予定の領域のビットマップ キャンバスのメソッドを呼び出すことができます。

于 2013-02-01T22:10:20.913 に答える