初めて書き込ませていただきます。
GraphFilter関数でのレベル補正を毎フレーム呼び出すようなプログラムで、ウインドウモードの切り替えを行ったところ、GraphFilterの結果が正しく得られない現象が発生しました。
ライブラリのバージョンは3.08c、環境はOSはWindowXPHome、グラフィックボードはgeforce9800gtx+、IDEはVC++2010Expressです。
以下がソースコードです。
#include "DxLib.h"
int gGraphHandle = -1;
int gScreenHandle= -1;
// 画像読み込み・復帰関数
void myRestoreGraph(){
gGraphHandle = LoadGraph(L"Texture.bmp");
gScreenHandle = MakeScreen(800,600,true);
}
/*****************************
Main関数
******************************/
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
// ウインドウモード切替のフラグ
bool WindowModeFlag = true;
// 初期化
// ウインドウタイトルの設定
SetWindowText( _T("") );
// 多重起動防止
SetDoubleStartValidFlag( FALSE );
// ウインドウモード
ChangeWindowMode( WindowModeFlag );
// クライアント領域サイズの設定
SetGraphMode( 800 , 600 , GetColorBitDepth() ) ;
// 非アクティブでも実行
SetAlwaysRunFlag( true );
if( DxLib_Init() == -1 ) return -1;
// 画像読み込み
myRestoreGraph();
// プログラムメインループ
for(;;){
if(ProcessMessage() != 0 || CheckHitKey(KEY_INPUT_ESCAPE)==1){
break;
}
// Fキーでウインドウモード切替
if(1 == CheckHitKey(KEY_INPUT_F)){
WindowModeFlag = !WindowModeFlag;
ChangeWindowMode( WindowModeFlag );
myRestoreGraph();
}
SetDrawScreen(gScreenHandle);
ClearDrawScreen();
DrawGraph(0,0,gGraphHandle,true);
GraphFilter( gScreenHandle, DX_GRAPH_FILTER_LEVEL, 60, 210, 120, 0, 255 ) ;
DrawString(0,0,L"test",GetColor(255,255,255));
SetDrawScreen( DX_SCREEN_BACK );
ClearDrawScreen();
DrawGraph(0,0,gScreenHandle,true);
ScreenFlip();
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
ウインドウモードを切り替えた後、GraphFilter( gScreenHandle...)を通るとgScreenHandleが真っ黒になってしまいます。(アルファチャンネルの情報は残っているようです)
この現象を発見した実際の作業コードではレベル補正以外のフィルターでも発生を確認しており、ガウスフィルタでは画像が崩れたり、色情報がおかしくなったりしていました。
GraphFilterをこういう使い方をするのがいけないのでしょうか?
よろしくお願いします。