フォントのアウトラインの一部がウインドウの背景色になってしまう

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
パトラッシュ
記事: 6
登録日時: 8年前

フォントのアウトラインの一部がウインドウの背景色になってしまう

#1

投稿記事 by パトラッシュ » 8年前

お世話になります。

AddFontResourceEx関数、D3DXCreateFont関数、DrawText関数を利用して、フリーフォントを描画するプログラムを組みました。
一応描画は出来たのですが、ウインドウの背景色がフォントの縁の一部に映りこんでしまって困っています。
たとえばウインドウの背景が青なら青、紫なら紫といったように文字の周りにはっきり出てしまいます。(添付ファイルのようになります)
映り込む範囲は1ピクセル程度の太さで、どうやら設定されている範囲部分以外は映りこまないようです。(影のような印象)
どうか解決方法を教えていただけないでしょうか。

【環境】WindowsXP SP3, VC++ 2008EE, DirectX9

以下は関係がありそうな部分のソースコードです。

コード:

//バッファのクリア/////
	pD3DDevice->Clear(
		0,NULL,
		D3DCLEAR_TARGET |
		D3DCLEAR_ZBUFFER, 
		D3DCOLOR_XRGB(255,255,255), 	// 背景色指定
		1.0f,
		0);

//フォントの読み込み///
LPCSTR font_path = "mplus-1m-bold.ttf"; // M+というフリーフォントを使用
	if (AddFontResourceEx(font_path, FR_PRIVATE, NULL) > 0) {
	} else {
		// フォント読込エラー処理
		MessageBox(NULL,"フォント読込失敗","",MB_OK);
	}

//D3DXCreateFont///
	D3DXCreateFont(  
        pD3DDevice,
        45,
        NULL,
        FW_REGULAR,
        NULL, 
        FALSE,
        DEFAULT_CHARSET,
        OUT_DEFAULT_PRECIS,
        DEFAULT_QUALITY, 
        DEFAULT_PITCH | FF_DONTCARE,  
        "M+ 1m bold",
        &font);  

//DrawText////////
        font->DrawText(  
            NULL,
            text,      // "回廊"
            count,    // -1
            pRect,   // 描画位置の構造体へのポインタ
            Format, // DT_NOCLIP | DT_SINGLELINE
            Color    // D3DXCOLOR(0.0f, 0.0f, 0.0f, 255.0f) が入る
        );  
添付ファイル
font2.png
背景が白の場合、文字の縁の一部が白になってしまう。水色の部分は別のテクスチャ。
font2.png (1.52 KiB) 閲覧数: 489 回
font.png
背景が紫の場合。
font.png (1.54 KiB) 閲覧数: 489 回

アバター
lriki
記事: 88
登録日時: 9年前

Re: フォントのアウトラインの一部がウインドウの背景色になってしまう

#2

投稿記事 by lriki » 8年前

文字を描画しているのはバックバッファですか?自分で作成したレンダリングターゲットですか?

バックバッファに描画しているのであれば、描画順序が問題かもしれません。
水色の部分→文字列 の順で描画すれば正しく描画させると思います。

パトラッシュ
記事: 6
登録日時: 8年前

Re: フォントのアウトラインの一部がウインドウの背景色になってしまう

#3

投稿記事 by パトラッシュ » 8年前

>>梨樹さん

仰る通り描画の順番を変更したら綺麗に描画されました!
分かってしまえば簡単な部分ですが描画順序はとても大事ですね・・・奥が深い。
困っていたのでとても助かりました、ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る