Graphics コンテキストがプリンター HDC に基づいて作成されたときに、Graphics::DrawImage() を使用してアルファ チャネルを持つビットマップを正常に描画する方法について、誰かが何か指針を持っていますか? プリンター ドライバーは通常、アルファ ブレンディングをサポートしていません。そのため、すべてをオフスクリーン ビットマップにレンダリングし、それをプリンターに送信するだけの代替手段があります。これは、特に大判プリンタへの高解像度印刷の場合、実行できないことがよくあります。
4 に答える
それはどんな種類のプリンターですか。通常のプリンターでは白は印刷されません。インメモリ イメージを作成し、それを「平坦化」して (アルファ チャネルを削除)、結果を出力します。
GDIplus を使用して、パターン化されたダイヤモンド形状を正しく印刷するためにまだ直面している問題を回避できるかどうかを確認しようと考えていたので、この質問をしていただきありがとうございます。現在、アルファブレンディングはほとんどのプリンターで機能しているように見えますが、ダイヤモンドに黒い角を描くプリンターがまだいくつかあります.
アルファブレンディングとは別に、ダイヤモンド形のクリップ領域を使用して形状を囲むことも試みましたが、通常、アルファブレンディングをサポートしていないプリンターは多角形のクリップ領域もサポートしていないようです. ダイヤモンドを上に描画する前に、printer-dc からビットマップにコピーしてプライミングを試みました。この問題は、プリンタ ドライバがページのどの部分に何が印刷されているかを実際には認識していないという事実に帰着するように見えるため、これも機能しません。
私の場合、次の計画は、大きなビットマップ ブラシを使用して、ダイヤモンドの塗りつぶしをプリンター hdc に直接描画することです。これも特定のプリンターで失敗する可能性が中程度あると思います。あなたがしていたことのオプションではないかもしれません。
DrawImage メソッドを呼び出す前に、画像を初期化するために白い四角形を描画しようとしましたか?
全体的なポイントは、画像の背後にある線で描かれたグラフィックを表示する必要があるということです。最初に (255, 255, 255, 0) の RGBA カラーで四角形を塗りつぶそうとしましたが、これは役に立ちません。アルファ値がゼロのピクセルは完全に透明として印刷されますが、部分的に透明なピクセルは完全に不透明に描画されます。