シフトウエア-イメージに文字を描画した場合のエッジ処理について。
この関数は非公開委の関数を使用していますが、下記の点で疑問があり質問しています。
1、文字のエッジ出しのために、shno2のイメージハンドルに文字の縁を書き出しています。
しかし、白色で出てしまうので合成するとただの太い文字になってしまうため、1ピクセルおきに
黒に色を書き換えていますが、スマートではありません。
なにか、縁の色を指定する方法はありませんでしょうか?
また文字の色も指定できないでしょうか?
2.直接描画のほうもエッジを指定すると、白で文字を書いていますが、何故か黄色っぽくなります。
これはバグ?それとも何かのミスや思い違い?
お忙しいと思いますが、よろしければ教えてください。
よろしくお願いいたします。
#include "DxLib.h"
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( true );
SetGraphMode(800, 600, 32);
// DXライブラリの初期化
if( DxLib_Init() == -1 ) return 0 ;
int Cr = GetColor( 0 , 0 , 255 ) ; // 青色の値を取得
DrawBox( 0 , 0 , 800 , 600 , Cr , TRUE) ; // 四角形を描画
// 作成したデータの識別番号を変数 FontHandle に保存する
int FontHandle1 = CreateFontToHandle( NULL , 20 , 3 ,DX_FONTTYPE_NORMAL); // : ノーマルフォント
int FontHandle2 = CreateFontToHandle( NULL , 20 , 3 ,DX_FONTTYPE_EDGE); // : エッジつきフォント
int FontHandle3 = CreateFontToHandle( NULL , 20 , 3 ,DX_FONTTYPE_ANTIALIASING); // : アンチエイリアスフォント
int FontHandle4 = CreateFontToHandle( NULL , 20 , 3 ,DX_FONTTYPE_ANTIALIASING_EDGE); // : アンチエイリアス&エッジ付きフォント )
// 作成したフォントで画面左上に『Hellow!!』と白色の文字列を描画する
DrawStringToHandle( 0 , 0 , "DrawStringToHandleのDX_FONTTYPE_NORMALでHELLOW!!" , GetColor( 255 , 255 , 255 ) , FontHandle1 ) ;
DrawStringToHandle( 0 , 40 , "DrawStringToHandleのDX_FONTTYPE_EDGEでHELLOW!!" , GetColor( 255 , 255 , 255 ) , FontHandle2 ) ;
DrawStringToHandle( 0 , 80 , "DrawStringToHandleのDX_FONTTYPE_ANTIALIASINGでHELLOW!!" , GetColor( 255 , 255 , 255 ) , FontHandle3 ) ;
DrawStringToHandle( 0 , 120 , "DrawStringToHandleのDX_FONTTYPE_ANTIALIASING_EDGEでHELLOW!!" , GetColor( 255 , 255 , 255 ) , FontHandle4 ) ;
int shno1 = MakeARGB8ColorSoftImage(800,200);
FillSoftImage(shno1,0,0,0,0);
int shno2 = MakeARGB8ColorSoftImage(800,200);
FillSoftImage(shno2,0,0,0,0);
BltStringSoftImageToHandle(0,0,"BltStringSoft・・・のDX_FONTTYPE_NORMALでHELLOW!!",shno1,-1,FontHandle1);
BltStringSoftImageToHandle(0,40,"BltStringSoft・・・のDX_FONTTYPE_EDGEでHELLOW!!",shno1,shno2,FontHandle2);
BltStringSoftImageToHandle(0,80,"BltStringSoft・・・のDX_FONTTYPE_ANTIALIASINGでHELLOW!!",shno1,-1,FontHandle3);
BltStringSoftImageToHandle(0,120,"BltStringSoft・・・のDX_FONTTYPE_ANTIALIASING_EDGEでHELLOW!!",shno1,shno2,FontHandle4);
// 縁の部分を黒くする (う〜〜んスマートでない方法)------------
int r,g,b,a;
for(int x=0;x<800;x++) {
for(int y=0;y<200;y++) {
GetPixelSoftImage(shno2,x,y,&r,&g,&b,&a);
if(r ==0x00ff && g ==0x00ff && b ==0x00ff) {
DrawPixelSoftImage(shno2,x,y,0x00,0x00,0x00,a);
}
}
}
int ghno2 = CreateGraphFromSoftImage(shno2);
DrawGraph(0,200, ghno2, TRUE);
int ghno1 = CreateGraphFromSoftImage(shno1);
DrawGraph(0,200, ghno1, TRUE);
// 次に標準フォントデータで画面に『OK?』という文字列を描画する
DrawString( 0 , 400 , "OK?" , GetColor( 255 , 128 , 100 ) ) ;
// キー入力を待つ
WaitKey() ;
// 作成したフォントデータを削除する
DeleteFontToHandle( FontHandle1 ) ;
DeleteFontToHandle( FontHandle2 ) ;
DeleteFontToHandle( FontHandle3 ) ;
DeleteFontToHandle( FontHandle4 ) ;
// DXライブラリの終了
DxLib_End() ;
// ソフトの終了
return 0 ;
}