Android版 DXライブラリをつかってアプリを作ってます。
以前、非公開の文字ドットパターン取得関数
BltStringSoftImageToHandle
を教えてもらい、便利につかっているのですが、小さい文字を表示すると、
各文字の右側がかけて、読めなくなるという問題が生じています
以下のテストプログラムをつくってみたところ
Android で実行すると、
フォントサイズが16以下では、各文字の右側が、後ろの文字で消去されるみたいです
(Sample の「l」が「e」の左側で消される)
BltStringSoftImageToHandle 関数の処理の問題ではないでしょうか
フォントの取得の処理の修正がむずかしければ
文字を描画するときに、消去してから文字を書くのではなく
OR で上書きするようにすれば、前の文字が消えないように
できるのではないでしょうか(文字が重なりますが、まだ読める)
#include <stdlib.h>
#include <string.h>
#include "DxLib.h"
int android_main( void )
{
if( DxLib_Init() == -1 ){ // DXライブラリ初期化処理
return -1 ; // エラーが起きたら直ちに終了
}
DrawBox( 220, 140, 420, 340, GetColor( 255,0,0 ), TRUE ) ; // 四角形を描画する
// 16ドット以下の文字を表示するテストプログラム
{ int nf,sz,fh,sft,xx,yy,y0,x0,col;char *im,data[100];
x0=220, y0=140;
for(fh=16;fh>4;fh--) { // fh フォントサイズ
sprintf(data,"%d Sample",fh);
nf = CreateFontToHandle(NULL, fh, 0, DX_FONTTYPE_NORMAL, -1, -1, FALSE, -1);
sz = GetDrawStringWidthToHandle(data, strlen(data), nf, FALSE);
sft = MakeSoftImage(sz, fh * 2);
if ((im = (char *) GetImageAddressSoftImage(sft))) {
memset(im, 0, 4 * sz * fh * 2); // 0 に初期化
BltStringSoftImageToHandle(0, 0, data, sft, -1, nf, FALSE);
for (yy = 0; yy < fh * 2; yy++) { // 中身を表示
for (xx = 0; xx < sz; xx++) {
if (*(im + 3 + (4 * sz) * yy + xx * 4)) col = GetColor(255, 255, 255);
else col = GetColor(0, 0, 255);
DrawBox(x0 + xx, y0 + yy, x0 + 1 + xx, y0 + 1 + yy, col, TRUE);
}
}
}
y0+=fh*2;
}
}
WaitKey() ; // キー入力待ち
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}