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クラスを使えば、サムネイル画像が取り出せます。
私も試してみて、紹介する程の内容でしたら、紹介したいと思います。