Androidで画像情報を取得する方法 | sola's note

sola's note

日ごろのメモを書いていきます。何か新しいものを作るために。

Android開発において、画像情報を取得する方法は大きく2通り。(だと思ってる。)

1.画像ファイルのパスを指定して、直接取得する。

2.画像ファイルのIDを指定して、ContentResolverを通して取得する。

使うメソッドはそれぞれ以下の通り。
2のパターンは、取得する画像に応じてメソッドが複数存在します。

1.
Bitmap bmp = BitmapFactory.decodeFile(String path);

2.
Bitmap bmp = MediaStore.Images.Thumbnails.getThumbnail(ContentResolver cr, long origId, int kind, Options options);
Bitmap bmp = MediaStore.Images.Media.getBitmap(ContentResolver cr, Uri url);

(※上記メソッドは代表例で、引数の数が異なるものが存在します。(オーバーロードされてます。))

二つの違いは大きく考えると、ContentProviderを使うか、使わないかにあります。
ContentProviderはAndroid端末内のアプリケーション同士でデータを共有する際に用いるものなので、
結果的に上記の二つはアプリケーション独自でファイルを取得するか、共有して取得するかの違いとなりそうです。


そして、ここからは検証していないので、あくまで体感上の話となりますが、

1はアプリで完全にコントロール出来ますが、遅いです。
アプリでデータを取得していなければ取得する必要がありますし、最終的に破棄しないとアプリがバンバン落ちます。

2はリソースが端末上の共有となりますので、アプリによる完全なコントロールは出来ませんが、早いです。
アプリでデータを取得していなくても、共有で持っている場合があるので、
一度読み込んだ事がある画像であればそれなりの速度で読み込みます。

但し、読み込むリソースが大量になると、2の方が端末のVMが重くなるような感じがしました。
なんというか読み込みスピードは上がりますが、落ちやすくなっているような気がします。
とは言っても、2Mbyteくらいの画像1000ファイルをListViewとかで読みこんで馬鹿みたいにスクロールした場合…なので、
小さなサイズのファイルだとそこまで感じないかもしれません。

この点の検証も必要ですが、次回は各メソッドの引数の用意の仕方について書こうと思います。