トップページ > 記事閲覧
BltStringSoftImageToHandle の使い方
名前:大和団次郎 日時: 2024/02/07 18:18

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 ; // ソフトの終了 }
メンテ

Page: 1 |

Re: BltStringSoftImageToHandle の使い方 ( No.1 )
名前:管理人 日時:2024/02/07 22:32

> これを確認するために、以下のプログラムをつくってみたところ、 > こんどは、文字範囲が四角形に塗りつぶされ、文字がでてこなくなりました。 こちらについてはこちらの判定式が原因です if(*im){ //0でなければ赤い点をかく(緑と同じ文字がでたら成功) BltStringSoftImageToHandle では文字転送領域に対して 『R,G,B は必ず 255 を代入、A が文字の部分が 0 以外に、文字ではない部分は 0 が代入される』 という処理を行っていますので、 *im で R,G,B,A を纏めて判定すると、文字転送が発生しないスペース文字の部分以外は R,G,B は 255 なのでこちらの if が真になってしまい、四角形になります なので if(im[3]!=0){ //0でなければ赤い点をかく(緑と同じ文字がでたら成功) として、A だけで判定して頂ければ、塗りつぶされること無く、文字が出てきます よろしければお試し下さい m(_ _)m
メンテ
Re: BltStringSoftImageToHandle の使い方 ( No.2 )
名前:大和団次郎(解決) 日時:2024/02/08 08:28

失礼しました。im[1]だけやってみて、im[3]をやってなかったです。単純なミスでした。 それで、小さい文字でも、ちゃんと動いていることを確認しました。 アプリのほうで、文字の右側が消えるのは、文字を1文字ずつ書いているせいのような気がしてます。 すばやい回答ありがとうございました!助かりました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存