トップページ > 記事閲覧
Android:ReCreateGraphFro〜追記
名前:ギウ 日時: 2017/03/13 19:11

お世話になっております。 Android版の ReCreateGraphFromMem で16Bit画像を表示できませんでした。 解決方法がありましたら教えてください。 詳細を書きます↓ ======================= ■やりたいこと CPUメモリにビットマップデータ(16Bit & 24Bit)を作り、それを画面へ表示したいです。(なるべく高速に) ■行ったプログラム内容 SetGraphMode(960,540,16); で画面を作成後、 400x300ピクセルの16Bitと24BitのBMPをメモリ上に作成し、 グラデーションをかける等の処理をした後、 MakeGraph(400,300); で作ったハンドルに対して ReCreateGraphFromMem を行いました。 ■Windows版での実行結果 16Bitと24Bitの画像、両方共、正しく表示されました。 なので、メモリ上のBMPデータ自体は問題ないと思います。 ■Android版での実行結果 24Bitの画像は正しく表示されましたが、 16Bitの画像は、ReCreateGraphFromMem で -1 が返ってきました。 ======================= 以上です。 他に必要な情報がありましたらご指摘お願いいたします。
メンテ

Page: 1 |

Re: Android版:ReCreateGraphFromMem ( No.1 )
名前:管理人 日時:2017/03/13 00:27

ご指摘ありがとうございます 16bitのBmp画像の読み込みに Windows以外の環境では対応していませんでした 自分でもすっかり忘れていたのですが、16bitのBmp画像を24bitのBmp画像に 変換してから読み込んでおり、16bit -> 24bit の変換に Win32 API を使用していました 現在では 16bit画像のまま読み込めるようになっているので 『Windows以外では Win32 API が使用できないのでエラー』としていた箇所を修正して 16bit画像も読み込めるようにしました その変更を施したバージョンをこちらにアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibAndroidTest.exe // Android用
メンテ
Re: Android版:ReCreateGraphFromMem ( No.2 )
名前:ギウ(解決) 日時:2017/03/13 09:19

あ、非対応だったのですね; ご対応頂き有難うございます! 正常な動作を確認しました&速度も問題なく高速です!(PC側と大差ないくらいに) この機能があれば自社ライブラリと併用して使えるので、何本かAndroidへ移植しようと思ってます。 改めまして、素晴らしいライブラリを有難うございます。 今後とも(今回みたいな動作報告くらいしかお手伝いできませんが;)よろしくお願い致します。
メンテ
Re: Android版:ReCreateGraphFromMem ( No.3 )
名前:ギウ 日時:2017/03/13 17:56

度々すみません、ReCreateGraphFromMemの処理速度についてですが、 SetGraphMode(960,540,16); で画面を作り、 960x540x16bitカラーのメモリ画像を ReCreateGraphFromMem&DrawGraph で表示すると、22msくらいでした。 どちらも32bitにしてみると、 SetGraphMode(960,540,32); 960x540x32bitカラーのメモリ画像を ReCreateGraphFromMem&DrawGraph で表示すると、7〜10msくらいでした。(どちらも実機での速度です) 質問ですが、16bitのBMPを毎フレーム変えながら表示したい場合、 最速の方法は、↓な感じでしょうか。 ===================== SetGraphMode(960,540,32); // 32bitで画面を作成 ; // (中略) int gid = MakeGraph(960,540); while(ProcessMessage()==0) { ; // ここで16bitのBMPをいろいろ変える(CPUによるメモリ操作で) ; // ここで16bitのBMPを、32bitのBMPに手動で変換 ReCreateGraphFromMem(bmp32, size, gid); // 32bitのBMPをDX用に変換 DrawGraph(0,0,gid,FALSE); // 全画面に表示 ScreenFlip(); // 画面に反映 } ===================== より速く描画できる方法がありましたら教えてください。 よろしくお願いいたします。
メンテ
Re: Android版:ReCreateGraphFromMem ( No.4 )
名前:ギウ 日時:2017/03/13 19:10

追記。 16bit→32bitに手動変換の部分は、リリースで1〜2msくらいでした。 (一先ずこの状態で開発を進めます) あと上記が最速の場合、 「16bitカラーのみのスマホか、32itカラー可能なスマホか」を判定できれば、それ毎の処理をできるのですが、判定は可能でしょうか。 (あまり需要の無さそうな要望ですみません;)
メンテ
Re: Android:ReCreateGraphFro〜追記 ( No.5 )
名前:管理人 日時:2017/03/14 01:00

すみません、DXライブラリはよく使用されるピクセルフォーマットの変換は 専用の高速に実行できるコードを用意しているのですが、 16bit の Bitmap( X1R5G5B5 or R5G6B5 ) から、 OpenGL ES 2.0 の 16bit テクスチャフォーマット( R5G5B5A1 ) に高速に変換するコードを用意していませんでした ( 高速なコードがない場合は『低速だけどどんなピクセルフォーマットの変換でも行えるコード』で変換が実行されます ) 手元の Android環境で 16bit Bitmap → OpenGL ES 2.0 16bit Texture のピクセルフォーマット変換を 高速に行うためのコードを追加してみましたので、よろしければこちらのコードを追加したバージョンを使用して SetGraphMode(960,540,16);で画面を作り、960x540x16bitカラーのメモリ画像を使用する という方法( 高速コード用意前は 22ms だった環境 )を試してみてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibAndroidTest.exe // Android用 > 「16bitカラーのみのスマホか、32itカラー可能なスマホか」を判定できれば、それ毎の処理をできるのですが、判定は可能でしょうか。 OpenGL ES 2.0 が動作する環境では 32bitカラーや 16bitカラーには必ず対応しているので、 少なくともDXライブラリAndroid版が動作する環境であれば 32bitカラーに対応しているかどうかの確認は不要です
メンテ
Re: Android:ReCreateGraphFro〜追記 ( No.6 )
名前:ギウ(解決) 日時:2017/03/14 09:16

ご対応有難うございます! (555と565以外にもOpenGL用があったんですね) 試してみたところ、平均5ms〜6msの速度になってました! これなら遅いスマホが11msくらいとしても余裕ができます。 > 少なくともDXライブラリAndroid版が動作する環境であれば 32bitカラーに対応しているかどうかの確認は不要です 了解です! ではこれで解決ということで。 今回も有難うございました!
メンテ

Page: 1 |

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

   クッキー保存