アンチエイリアス付きフォントは半透明描画を使用してアンチエイリアス部分を
実現しているので、α付き画像にアンチエイリアス付きフォントで文字列を描画すると、
描画した部分が半透明になります
そうすると、文字が描画されている箇所は半透明なので、背後に
表示される画像が暗いと文字の部分が暗くなり、背後に明るい画像が
表示されていると文字が明るく表示され、結果として背後に暗い画像が
表示されている場合より文字が太くなっているように見えます
これを回避するにはまずαの無い画像に対して文字を描画して、
それをα付きの画像に描画する必要があります
サンプルプログラムを組んでみましたので、よろしければご覧に
なってみてください
#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;
}