トップページ > 過去ログ > 記事閲覧
文字が太る
名前:98 日時: 2013/04/04 06:20

MakeScreenでαつきを作って上レイヤー、下レイヤ−とし それぞれを描画してDrawGraphで描画する時に 上レイヤーにDrawBoxで黒四角を書きその上にアンチ付き文字を描画 下レイヤ−に画像が描画されていると文字が太ります。 下レイヤ−に画像がないと太りません。 文字が太らないように出来ないでしょうか。

Page: 1 |

Re: 文字が太る ( No.1 )
名前:管理人 日時:2013/04/07 18:42

アンチエイリアス付きフォントは半透明描画を使用してアンチエイリアス部分を 実現しているので、α付き画像にアンチエイリアス付きフォントで文字列を描画すると、 描画した部分が半透明になります そうすると、文字が描画されている箇所は半透明なので、背後に 表示される画像が暗いと文字の部分が暗くなり、背後に明るい画像が 表示されていると文字が明るく表示され、結果として背後に暗い画像が 表示されている場合より文字が太くなっているように見えます これを回避するにはまずαの無い画像に対して文字を描画して、 それをα付きの画像に描画する必要があります サンプルプログラムを組んでみましたので、よろしければご覧に なってみてください #include "DxLib.h" #include <string.h> char *String = "表示文字列" ; int FontSize = 16 ; int BaseColorR = 0 ; int BaseColorG = 128 ; int BaseColorB = 0 ; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int screen; int fontscreen; int fonthandle; int DrawX, DrawY ; int StringWidth ; // ウインドウモードで起動 ChangeWindowMode( TRUE ); // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; fonthandle = CreateFontToHandle( NULL, FontSize, 3, DX_FONTTYPE_ANTIALIASING ) ; screen = MakeScreen( 640, 480, TRUE ) ; // 文字列描画用のアルファなし画面を作成 fontscreen = MakeScreen( 640, FontSize, FALSE ) ; // 文字列描画用のアルファなし画面に文字列を描画する // その際描画した文字列のドット幅を取得しておく { SetDrawScreen( fontscreen ) ; // 描画文字列の幅を取得 StringWidth = GetDrawStringWidth( String, strlen( String ) ) ; // 下地の色でフォント描画用画像を塗る DrawBox( 0, 0, StringWidth, FontSize, GetColor( BaseColorR, BaseColorG, BaseColorB ), TRUE ) ; // 文字列描画用画面に文字列を描画 DrawStringToHandle( 0, 0, String, GetColor( 255,255,255 ), fonthandle ) ; } SetDrawScreen( screen ) ; ClearDrawScreen() ; // サブ画面に下地色の四角形を描画 DrawBox( 160, 120, 480, 360, GetColor( BaseColorR, BaseColorG, BaseColorR ), TRUE ) ; // サブ画像に文字列描画用画面を描画 { DrawX = 160 + 16 ; DrawY = 120 + 16 ; // SetDrawArea を使用して文字列が描画されている領域のみサブ画面に描画されるようにする SetDrawArea( DrawX, DrawY, DrawX + StringWidth, DrawY + FontSize ) ; DrawGraph( DrawX, DrawY, fontscreen, FALSE ) ; // 描画可能領域を元に戻す SetDrawArea( 0, 0, 640, 480 ) ; } SetDrawScreen( DX_SCREEN_BACK ) ; DrawBox( 0, 0, 640, 480, GetColor( 128,128,128 ), TRUE ) ; DrawGraph( 0, 0, screen, TRUE ) ; ScreenFlip() ; WaitKey() ; // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; }
Re: 文字が太る ( No.2 )
名前:98(解決) 日時:2013/04/08 06:25

サンプルプログラムありがとうございます。 解決できました。

Page: 1 |