2013年6月22日土曜日

[Android] OpenGLの簡易画像ビュアーにSDカード内の画像を表示する

How to load the image files in a SD card

前回 はフリーサイズの画像を伸縮してOpenGL APIで表示するアプリを作りました。
このアプリはプロジェクトのリソースとして組み込んだ画像しか表示することができません。
今回はSDカードに保存されている画像をOpenGL APIで表示するアプリを作ります。
既に次の様な操作方法が実装済みです。
・スクロールで移動
・ピンチアウトで拡大
・ピンチインで縮小

SDカードには複数の画像ファイルが保存されているとし、一枚ずつ表示する画像を差し替えていきます。
画像を差し替える操作方法
・画面の左から右へ大きくスワイプしたら次の画像を表示
・画面の右から左へ大きくスワイプしたら前の画像を表示
とします。
画面の横幅の半分以上の距離をスワイプしたら画像を差し替える様にします。

画像の表示順は画像ファイル検索時に見つけた順です。
表示する画像の種類は拡張子が「.png」「.jpg」「.jpeg」「.gif」のファイルとします。拡張子の大文字小文字は区別しません。
隠しファイルに設定されている画像ファイルや隠しフォルダーに保存されている画像ファイルは表示しないことにします。

ところでAndroid端末のSDカードのパスは機種ごとに異なります
実際に手持ちの機種で調べたところメーカーごとに違うことを確認しています。
SDカードのパスを取得するに当たり
とむ・やむくんさんの 戌印-INUJIRUSHI- (Androidあれこれ)
http://inujirushi123.blog.fc2.com/blog-entry-30.html
を参考にさせて頂きました。

このブログを書いている時点の開発環境は次の通りです。
・Windows8 (64bit)
・Eclipse Juno (32bit) (XP互換モードで起動)
・Android SDK r21.0.1

SDカード内の画像ファイルの検索は時間がかかるので AsyncTask を使います。
検索が完了したら最初に見つけた画像を表示します。

以下ソースです。

Activity(MainActivity.java)

※特別な権限(Permission)は不要なのでマニフェストは省略します。
Android2.2以降で動作します。
Target SDK Version が8以上の設定でビルドできます。

実行すると下の様になります。
本のページをめくるようにフリックするとスマートフォンのカメラ機能で撮影した画像や保存したスクリーンショットが次々と表示されます。

関連ブログ
[Android] フリーサイズの画像をOpenGLのテクスチャに表示する
[Android] OpenGLで簡易画像ビュアーを作る
[Android] ジェスチャーでOpenGL簡易画像ビュアーに拡大縮小機能を追加する
[Android] OpenGLでプロ生ちゃんをアニメーションさせる
[Android] OpenGL ESで文字を表示する
[Android] OpenGLで頂点の多いポリゴンを扱うには
[Android] OpenGLでシャープ製端末用3D(立体視)アプリケーションを作る
[Blender] obj2opengl.plをJava用に改造する
[Windows8][Android] Can't bind to local 8600 for debugger

以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿