トップページ > 記事閲覧
GraphBlend関数と文字セット?
名前:3ペソ 日時: 2021/02/16 00:01

DXライブラリに楽しくゲーム作成をさせてもらっています、いつもありがとうございます。 プロジェクトのプロパティの文字セットを「マルチバイト文字を使用する」から「Unicode文字セットを使用する」に変更し、下記のようなプログラムを書きました。 「1920*1080風景画像に400*400正方形のぼかし風景画像が乗る」という動作結果を想定していたのですが、GraphBlend関数を思うように動作させる事ができず 「1920*1080風景画像に1920*1080ぼかし風景画が乗る」という結果になりました。 また自分にはよく分からなかったのが、SetUseCharCodeFormat関数で指定する文字コードをUTF-8、あるいはデフォルトのSHIFT-JISにすると 想定通りの描写結果を得られる事です。 他にも、指定文字コードがUTF-16LEのままであっても、GraphBlend関数のRGB色指定用の第5〜7引数を「SRC_R, SRC_G, SRC_B」から別の物に変更すると想定通りの描写結果になりました。 (例えば第5〜7引数をSRC_G, SRC_R, SRC_Bと変えると、色はその通り変化しますが想定通りの400*400正方形のぼかし風景画像を得る事ができました) 文字セットの知識が非常に浅いのでその辺りの問題なのかな、とは思うのですが、自分ではどこをどう弄れば想定通り動くようになるのかが分かりませんでした。 解決策、あるいは「○○の知識が足りていないのでそちらを勉強して再チャレンジした方が良い」等々のご助言を頂けるととてもありがたいです。 以下がソースです。 #include "DXlib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { SetGraphMode( 1920, 1080, 32 ); SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF16LE ); if( DxLib_Init() == -1 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int GraphHandle = LoadGraph( L"Graphic/Background.png" );//1920*1080pixelの風景画像 int ScreenShotHandle = MakeScreen( 1920, 1080, TRUE );//現画面保存用の空ハンドル int BlendHandle = LoadGraph( L"Graphic/Blend.png" );//1920*1080pixel、画像中央に直径400pixelの正方形が書かれているアルファチャンネル付画像 while(1) { ClsDrawScreen(); DrawGraph( 0, 0, GraphHandle, 0 );//背景を描写 GetDrawScreenGraph( 0, 0, 1920, 1080, ScreenShotHandle );//現画面をハンドルに保存 GraphFilter( ScreenShotHandle, DX_GRAPH_FILTER_GAUSS, 32, 6400 );//保存したハンドルをぼかし加工 GraphBlend( ScreenShotHandle, BlendHandle, 255, DX_GRAPH_BLEND_RGBA_SELECT_MIX, DX_RGBA_SELECT_SRC_R, DX_RGBA_SELECT_SRC_G, DX_RGBA_SELECT_SRC_B, DX_RGBA_SELECT_BLEND_A );//ぼかし加工を行ったScreenShotHandleをBlendHandleの正方形に切り抜き DrawGraph( 0, 0, ScreenShotHandle, TRUE );//切り抜いたぼかし正方形を描写 if( ( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_A ) ) break; ScreenFlip(); if( ProcessMessage() == -1 ) break; } DxLib_End(); return 0; }
メンテ

Page: 1 |

Re: GraphBlend関数と文字セット? ( No.1 )
名前:管理人 日時:2021/02/16 02:12

DXライブラリがお役に立てているようで何よりです (^ ^ > プロジェクトのプロパティの文字セットを「マルチバイト文字を使用する」から「Unicode文字セットを使用する」に変更し、下記のようなプログラムを書きました。 すみません、プロジェクトのプロパティの文字セットが「Unicode文字セットを使用する」に 設定された状態で SetUseCharCodeFormat が使用されることを想定していませんでした プロジェクトのプロパティの文字セットが「Unicode文字セットを使用する」に設定した状態で SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF16LE ); ↑こちらの行をコメントアウトしたところ手元では 「1920*1080風景画像に400*400正方形のぼかし風景画像が乗る」という動作結果になりました なので、SetUseCharCodeFormat を使用される際はプロジェクトのプロパティの文字セットを 「マルチバイト文字を使用する」の設定で実行するようにしてください m(_ _;m 尚、「マルチバイト文字を使用する」に設定された状態で SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF16LE ); を実行し、 int GraphHandle = LoadGraph( L"Graphic/Background.png" );//1920*1080pixelの風景画像 ↑こちらのように先頭に L" が付く文字列を渡すコードを書くとコンパイルエラーになってしまいますが、 int GraphHandle = LoadGraph( ( const char * )L"Graphic/Background.png" );//1920*1080pixelの風景画像 ↑このように const char * 型にキャストすることでエラーが発生しないようにすることができます
メンテ
Re: GraphBlend関数と文字セット? ( No.2 )
名前:3ペソ(解決) 日時:2021/02/16 19:24

ご教示頂いたとおりに変更したところ、無事想定通りの結果を得る事ができました。 迅速なご対応、誠にありがとうございます。
メンテ

Page: 1 |

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

   クッキー保存