トップページ > 記事閲覧
Android版でGraphFilter関数(タイプDX_GRAPH_FILTER_HSB)の効果が画面再表示時に切れる
名前:TK 日時: 2020/05/02 23:28

いつもDxLibには大変お世話になっております。 Android版のGraphFilter関数(タイプDX_GRAPH_FILTER_HSB)について、 アプリの画面を再表示させたときに、フィルターした効果が切れる症状で困っています。 恐れ入りますが、原因の推察など、ご教示いただきますよう何卒宜しくお願い申し上げます。 <症状> GraphFilter関数(タイプDX_GRAPH_FILTER_HSB)でフィルター効果をかけた画像を表示しておく。 その後、 ・アプリのスリープ → スリープ解除 → アプリ再表示 ・実機のディスプレイOFF → 再度ON → アプリ再表示 ・Homeキー押下でHomeを表示 → タスク一覧からアプリを選択 → アプリ再表示 といった動作でアプリ画面を再表示させると、フィルターの効果がなくなった画像に戻ってしまう <環境> Visual Studio Community 2017 DXライブラリ Android版 (Ver3.21d) 実機 Sharp SH-M07 (※Android Emulatorで試すとそもそも最初からフィルター効果がかからず元の画像で表示されてしまいます。。。) 恐れ入りますが、何卒宜しくお願い申し上げます。
メンテ

Page: 1 |

Re: Android版でGraphFilter関数(タイプDX_GRAPH_FILTER_HSB)の効果が画面再表示時に切れる ( No.1 )
名前:管理人 日時:2020/05/03 21:59

> ・アプリのスリープ → スリープ解除 → アプリ再表示 > ・実機のディスプレイOFF → 再度ON → アプリ再表示 > ・Homeキー押下でHomeを表示 → タスク一覧からアプリを選択 → アプリ再表示 Androidではこれらの操作を行った場合、OpenGL ES のオブジェクトが全て破棄されて しまうので、内部では破棄された画像などを自動で画像ファイルから再読み込みする という処理を行っています なので 画像ファイルA を LoadGraph で読み込み、グラフィックハンドルBに画像を保存 ↓ GraphFilter で グラフィックハンドルB にフィルター効果を掛ける ↓ スリープ ( スリープしたことでグラフィックハンドルBの『フィルター効果が掛かった画像A』が失われる ) ↓ スリープ解除 ↓ アプリ再表示( 画像情報が失われたグラフィックハンドルBに画像ファイルAの内容を自動で再読み込み ) ↓ 結果、グラフィックハンドルBの内容は『フィルター効果が掛かっていない画像A』になる ↑こちらのような経過でフィルター効果が掛かっていない状態になってしまいます なので、下記のサンプルのように MakeScreen で作成した画像と同じサイズの グラフィックハンドルに毎フレーム GraphFilterBlt でフィルター効果を掛けた画像を 転送するようにしてください m(_ _;m #include "DxLib.h" int android_main( void ) { int GrHandle ; int TempHandle ; int SizeX, SizeY ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 画像を読み込む GrHandle = LoadGraph( "Src1.bmp" ) ; // 画像のサイズを取得 GetGraphSize( GrHandle, &SizeX, &SizeY ) ; // 画像と同サイズのグラフィックハンドルを作成 TempHandle = MakeScreen( SizeX, SizeY, TRUE ) ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; while( ProcessMessage() == 0 ) { // 画面をクリア ClearDrawScreen() ; // フィルターを掛けた画像を TempHandle に転送 GraphFilterBlt( GrHandle, TempHandle, DX_GRAPH_FILTER_HSB, 0, 100, 90, -60 ) ; // フィルターを掛けた画像を描画 DrawGraph( 0, 0, TempHandle, TRUE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; return 0 ; }
メンテ
Re: Android版でGraphFilter関数(タイプDX_GRAPH_FILTER_HSB)の効果が画面再表示時に切れる ( No.2 )
名前:TK(解決) 日時:2020/05/04 00:55

症状がおきる理由をご教示いただきありがとうございました。 なるほど、そういう理由だったんですね。 了解いたしました。 今作っているソフト的には毎フレームフィルターをかけるのがちょっとやりづらかったため、 SetAndroidGainedFocusCallbackFunctionを利用して スリープから復帰した際に再度フィルターをかける というようにすることで対策いたしました。 素早いご回答、誠にありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存