0

TextRenderer.DrawTextメソッドを使用して、バックカラーの単色の白(Color.White)であったビットマップにテキストを( を使用して)レンダリングしていますFillRectangle。次に、次のように、TransparentBltこのビットマップをカラフルな背景画像を含むメモリ DC に、Color.White And &HFFFFFF透明色の RGB 値 (crTransparent引数) として使用します。

TransparentBlt(hDestMemDc, 0, 0, iTextWidth, iTextHeight, hTextMemDc, 0, 0, iTextWidth, iTextHeight, Color.White.ToArgb() And &HFFFFFF)

{ 次にBitBlt、組み合わせた画像をコントロールのサーフェスに表示しますが、あまり関係ありません }

レンダリングされたテキストはシャープでクリアですが、TransparentBlt結果はシャープではありません

これは、白い背景の上にレンダリングされたテキストのスナップショットです (これは画像であり、入力されたテキストではありません)。

ここに画像の説明を入力

これは、上の画像をカラフルな背景の上にトランスブリッティングした結果です。

ここに画像の説明を入力

白い(透明になる) ポイントがまだ赤いテキストを囲んでいることに注意してください。

さらに、画像の左側に描かれた白い垂直線と、右上隅に描かれた同様の短い水平線に注目してください。

VB.NET 2005 (別名 VB8) を使用しています。アドバイスをいただければ幸いです。

4

1 に答える 1

2

テキスト アンチエイリアシング / ClearType は、すべてのテキストが同じ色でレンダリングされるわけではないことを意味します。テキストの外側のピクセルは、それらが描画される背景色とブレンドされ、エッジを滑らかにする効果があります。このため、テキストを 1 つの背景色でレンダリングし、それを切り取って、別の背景に対して同じように見えると期待することはできません。

テキストをレンダリングするときにアンチエイリアシングを無効にすることもできますが、結果はあまり良くありません。

代わりに、最終的なターゲット ビットマップのコピーをメモリに作成し、その上にテキストをレンダリングしてから、再度画面にブリットする必要があります。

于 2013-07-10T20:32:04.200 に答える