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;
}