mucchinのAndroid戦記

Androidのカメラで撮影して保存した画像ファイルの読込み方法

Androidのカメラで撮影して保存した画像ファイルの読込み方は?

前回のAndroidアプリのカメラ機能で撮影した画像の保存方法の続きです。
今回は、カメラで撮影したデータを実際に読み込んで画面表示などに使う手順を説明します。
せっかく撮影したのに、画面に出す事が出来ないのでは意味無いに等しいですからね…。


読み込み方は、保存の方法によって違ってくるかと思います。
保存時、ファイルパスにOutputStreamで保存というやり方であれば、InputStreamを使って読み込めばいいでしょう。
今回は、「MediaStore.Images.Media.insertImage()」を使って保存したデータの読み込み方について説明します。
少々苦戦しましたが、以下のようなコードで読み込めます。


String[] proj = {
  MediaStore.Images.Media.DATA,
  MediaStore.Images.Media.DISPLAY_NAME
};

Cursor c = getContentResolver().query(
  MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
  proj, null, null, null);


MediaStore.Images.Media.insertImage()は、端末のデータベースにあるメディア専用のテーブルへデータを格納するという保存形式になっています。
したがって、データの読み込み時は、query()メソッド等でCursorインスタンスを取得するという手順になります。
通話ログやブックマークを取得するときと同じですね。
コンテンツプロバイダを利用します。

上記サンプルコードの「proj」ですが、SQLで言うと、SELECT句で指定するカラムのリストを指定します。
上記のサンプルコードでは、データの実体と、ファイル名を取得する、という意味合いになっています。

query()メソッドの第一引数は、外部メディアのメディア領域を示す「MediaStore.Images.Media.EXTERNAL_CONTENT_URI」を指定します。
これは、保存のときにも使った定数です。

上記のサンプルコードでは、全部の画像を引っ張ってくるとなりますが、必要であれば、条件を指定する事も出来ます。


スポンサーリンク




それでは、このサンプルコードの続きも掲載しておきましょう。


if(c.moveToFirst()){
  do{
    Bitmap bitmap = BitmapFactory.decodeFile(c.getString(0));
    String filename = c.getString(1);

    //後はあなたのご自由に!

  }while(c.moveToNext());
}


たいしたサンプルコードでなくてすみません。
但し、画像データの読み込みの部分は、結構貴重な情報だと思います。
そうでもないよ、って事ならすみません。

APIリファレンスでは、MediaStore.Images.Media.DATAが指し示すデータの内容は「DATA STREAM」とだけ記述されています。
最初は、InputStreamオブジェクトなのかな?と思ったんですが、上手く利用出来ませんでした。
調べてみると、実はファイルパスが返されてくるんです。
ですので、BitmapFactoryクラスのdecodeFile()メソッドを使って、Bitmapに変換しています。

ファイルパスだったら、、、DATA STREAMじゃねーじゃねーの?と思うんですが、どうでしょう…。
AndroidのAPIリファレンスって、ちょっといい加減なトコロがあるような気がするんですが。。。


余談ですが、画像をMediaStore.Images.Media.insertImage()で保存すると、同時にサムネイル画像も保存してくれるみたいです。
今回のサンプルコードでは、
MediaStore.Images.Media.EXTERNAL_CONTENT_URIを使って画像を取り出しましたが、MediaStore.Images.Thumbnailsクラスを使えば、サムネイル画像が取り出せます。
私も試してみて、紹介する程の内容でしたら、紹介したいと思います。


スポンサーリンク

URL :
TRACKBACK URL :

Leave a Reply

*
*
* (公開されません)

CAPTCHA


*

Return Top