dポイントプレゼントキャンペーン実施中!

はじめまして。
質問させてください。

CImageを使用して
OnPaint( )でBMP画像を描画するアプリを作成しております。

仕様といたしまして
ダイアログのDC部にBMPを全体に描画して
RGB( 255, 255, 255 )を透明化(背景が完全に見える)する
ようにしております。

OnInitDialog( )で透過、透明処理をしています。

OnPaint( )で
PaintDC PDC;
//背景を透過
PDC.SetBkMode( TRANSPARENT );
PDC.SetTextColor( RGB( 255, 0, 0 ) );
PDC.SetBkColor( RGB( 255, 255, 255 ) );
PDC.TextOutW( 100, 100, _T( "TEST" ) );

上記のように実装して、EXEで実行して確認しますと
Windows2000の場合、正常に文字(TEST)が赤字で描画されるのですが
WindowsXPの場合、赤字で描画されるのですが文字の周りがぼやけてしまいます。

イメージとしては文字描画部分が
2000の場合、BMP表示
XPの場合、JPG表示
のようになります。

これは仕様なのでしょうか?
それとも何かコードレベルで解決できるのでしょうか?

お詳しい方がおりましたらご教授お願いいたします。
よろしくお願いいたします。

A 回答 (1件)

Xpでは文字にアンチエイリアス


(文字の縁を滑らかにする技法)
がかかる為です。

「画面のプロパティ」→「デザイン」タブにある「効果」の
「次の方法でスクリーン フォントの縁を滑らかにする」のチェックをはずせば
Windows2000と同じにようにアンチエイリアスがかからなくなります。
(つまりTextOutA/W APIはこの設定に影響を受けます。MFCのTextOutも内部でこのAPIを呼んでいるだけです。)

私は使ったことが無いので詳細はわかりませんが
コード上で実現する為には
GetGlyphOutlineを使う事でシステムの設定に関係なく
アンチエイリアスを無効にしたフォントの出力が可能なようです。

「GetGlyphOutline アンチエイリアス無し」で検索すると、
それについて解説しているページが見つかります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!