Dxライブラリをつかった、アニメエディタをつくってます。
メモリに文字を描画する方法がみつからなかったので、
文字は、最前面にするという制限を加えていたのですが
BltStringSoftImageToHandle
をつかって、SoftImage に文字を描画する方法を教えてもらい,
いったん解決しました。
ただ、フォントサイズが小さいときに、文字の右側が次の文字に重なって
消えるという症状がでています。
これを確認するために、以下のプログラムをつくってみたところ、
こんどは、文字範囲が四角形に塗りつぶされ、文字がでてこなくなりました。
以下では、「Test String」という文字を左上に表示させているのですが、
アンドロイド実機で実行すると
文字の範囲が、真っ赤な四角になってしまいます。
画面に描画している、緑色の文字はちゃんと表示されます。
半角スペースのところだけ、赤くならないので、文字フォント展開に失敗しているみたいです。
もし、必要な初期設定などがあれば、教えていただけるとうれしいです。
Macで開発している アニメエディタ上では、文字描画できてます。
ただ、小さいフォントのときに、文字の右側が消えるので
文字が読みにくい症状になってます。大きい文字はOK
下のテストルーチンでは、文字範囲が真っ赤になります。
ライブラリ: DxLib_Android3_24d.zip
テスト環境:Windows11 Android Studio Giraffe | 2022.3.1 Patch 2
#include "DxLib.h"
// プログラムは android_main から始まります
int android_main( void )
{
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1 ; // エラーが起きたら直ちに終了
}
DrawBox( 220, 140, 420, 340, GetColor( 255,255,255 ), TRUE ) ; // 四角形を描画する
{ //ここからテスト用に追加
int sft, aWidth=400, aHeight=300,x,y,siz=64;
unsigned char*im; char *str="Test String";
int hfont = CreateFontToHandle( NULL , siz, 0, DX_FONTTYPE_NORMAL,-1 , -1 , FALSE , -1);
DrawStringToHandle(0,siz,str,GetColor( 0,255,0 ),hfont); //緑の文字をかく
sft = MakeSoftImage(aWidth, aHeight);
FillSoftImage(sft,0,0,0,0);//初期化
BltStringSoftImageToHandle(0, 0, str, sft,-1, hfont, FALSE); //同じ文字をかく
im = (unsigned char*)GetImageAddressSoftImage(sft);
for(y=0;y<aHeight;y++){
for(x=0;x<aWidth;x++){
if(*im){ //0でなければ赤い点をかく(緑と同じ文字がでたら成功)
DrawPixel(x,y,GetColor( 255,0,0 ));
}
im+=4;
}
}
DeleteSoftImage(sft);
}
WaitKey() ; // キー入力待ち
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}