fc2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム »画像ファイル読み込み
このページの記事一覧

【Android】【Java】リソース名で、res/drawable-~ フォルダから、画像を読み込む(Bitmap)  


ついでなので、「res/raw フォルダから、テキストファイルを読み込む」と同じように、リソース名を引数にした画像読み込み関数を書いておこう。

//リソース名で、res/drawable-~ フォルダから、画像を読み込む(Bitmap) (Android 用)
public static final Bitmap loadBitmapResource(String resName, Context context) throws IOException, FileNotFoundException {
final int id = context.getResources().getIdentifier(resName, "drawable", context.getPackageName());
if (id == 0) { //エラーにはならない
throw new FileNotFoundException("Not Found - " + resName);
}
return BitmapFactory.decodeResource(context.getResources(), id);
}

//メインでは... (※例外処理は省略)
String resName = "sample"; //"res/drawable-nodpi/sample.jpg" 等
Bitmap bitmap = loadBitmapResource(resName, this); //this は起動した Activity が良い(Context)

例外処理は手抜きしてるので、必要に応じて適当に。

リソースIDで画像読み込みを行うならば、return 文の1行だけでも良い。

Bitmap bitmap = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.sample);

ただ、ファイル読み込みでは通常、String 型のファイル名等がほとんどなので、int 型のリソースID形式でコードを大量に書いてしまうと汎用性の面では劣る。例えば、リソースIDが割り振られない場所(assets フォルダ等)に移動したときなどは、コードの大幅修正が必要になる。後々の使い回しも考えてコーディングするなら、String 型のリソース名で書いておいた方が、修正も楽だろう。ファイル名やリソース名は設定ファイル等に書いておき、メインコードを interface などを噛ませて置けば、ほとんど修正しなくて良いという利点がある。そういうときに利用すると良い。


(関連記事)
【Android】リソース名で、res/drawable-~ フォルダから、画像を読み込む(Drawable)
【Android】res/raw リソースフォルダからテキストファイルを読み込む
【Android】画像リソースIDをコードで取得する
【Android】アプリ名 app_name タグをコードで取得する
【Android】assets フォルダから画像ファイルを読み込む
【Android】SDカードから画像ファイルを読み込む
【Android】内部ストレージから画像ファイルを読み込む
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ


関連記事

category: Android

thread: プログラミング

janre: コンピュータ

tag: 画像ファイル読み込み 
tb: 0   cm: --

【Android】【Java】内部ストレージから画像ファイルを読み込む  


 これも基本は「内部ストレージからテキストファイルを読み込む」と同じ。変更点はストリームを開いた後のデコーダーを、画像用に書き換えれば良いだけ。

//内部ストレージから、画像ファイルを読み込む(Android 用)
public static final Bitmap loadBitmapLocalStorage(String fileName, Context context)
throws IOException, FileNotFoundException {
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(context.openFileInput(fileName));
return BitmapFactory.decodeStream(bis);
} finally {
try {
bis.close();
} catch (Exception e) {
//IOException, NullPointerException
}
}
}


//メインでは... (※例外処理は省略)
String fileName = "sample.jpg"; // "data/data/[パッケージ名]/files/sample.jpg" になる
Bitmap bitmap = loadBitmapLocalStorage(fileName, this); //this は起動した Activity が良い(Context)

 例外処理は手抜きしてるので、必要あれば適当に。

 DDMS で覗いて、保存フォルダが作られていれば、右上の方にある [push] ボタンからファイル転送もできるが、無い場合は、Context クラスの openFileOutput() で書き込めばフォルダが自動的に作られる。


(関連記事)
【Android】内部ストレージに画像ファイルを保存する(png)
【Android】内部ストレージに画像ファイルを保存する(jpg)
【Android】内部ストレージからテキストファイルを読み込む
【Android】内部ストレージにテキストファイルを保存する
【Android】SDカードから画像ファイルを読み込む
【Android】assets フォルダから画像ファイルを読み込む
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ


関連記事

category: Android

thread: プログラミング

janre: コンピュータ

tag: 画像ファイル読み込み  内部ストレージ 
tb: 0   cm: --

【Android】【Java】SDカードから画像ファイルを読み込む  


 これも基本は「SDカードからテキストファイルを読み込む」と同じ。変更点はストリームを開いた後のデコーダーを、画像用に書き換えれば良いだけ。

 isMountSDCard(), toSDCardAbsolutePath() は以前に作ったものを、そのまま使えば良い。
(※) Android4.4(API 19)あたりから内部ストレージの仮想パスに変わった模様
// SDCard のマウント状態をチェックする(Android 用)
public static final boolean isMountSDCard() {
final String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
return true; //マウントされている
} else {
return false; //マウントされていない
}
}

// SDCard のルートディレクトリを取得(Android 用)
public static final File getSDCardDir() {
return Environment.getExternalStorageDirectory();
}

// SDCard 内の絶対パスに変換(Android 用)
public static final String toSDCardAbsolutePath(String fileName) {
return getSDCardDir().getAbsolutePath() + File.separator + fileName;
}


//SDCard から、画像ファイルを読み込む(Android 用)
public static final Bitmap loadBitmapSDCard(String fileName) throws IOException {
if (!isMountSDCard()) {
throw new IOException("No Mount");
}
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(new FileInputStream(toSDCardAbsolutePath(fileName)));
return BitmapFactory.decodeStream(bis);
} finally {
try {
bis.close();
} catch (Exception e) {
//IOException, NullPointerException
}
}
}


//メインでは... (※例外処理は省略)
String fileName = "sample.jpg"; //"mnt/sdcard/sample.jpg" or "sdcard/sample.jpg" 等になる(端末による)
Bitmap bitmap = loadBitmapSDCard(fileName);

 例外処理は手抜きしてるので、必要あれば適当に。

 SDカードは基本的にマウント状態等のデバイス特有処理以外は、通常のローカルシステムのファイル処理と変わらないので、実は応用は非常に簡単。


(関連記事)
【Android】SDカードに画像ファイルを保存する(png)
【Android】SDカードに画像ファイルを保存する(jpg)
【Android】SDカードからテキストファイルを読み込む
【Android】SDカードにテキストファイルを保存する
【Android】SDカードのファイルを削除する
【Android】assets フォルダから画像ファイルを読み込む
【Android】内部ストレージから画像ファイルを読み込む
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ


関連記事

category: Android

thread: プログラミング

janre: コンピュータ

tag: 画像ファイル読み込み  SDカード 
tb: 0   cm: --

【Android】【Java】assets フォルダから画像ファイルを読み込む  


 assets フォルダからの画像読み込みも基本は「assets フォルダからテキストファイルを読み込む」と同じ。変更点はストリームを開いた後のデコーダーを、画像用に書き換えれば良いだけ。

//assets フォルダから、画像ファイルを読み込む
public static final Bitmap loadBitmapAsset(String fileName, Context context) throws IOException {
final AssetManager assetManager = context.getAssets();
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(assetManager.open(fileName));
return BitmapFactory.decodeStream(bis);
} finally {
try {
bis.close();
} catch (Exception e) {
//IOException, NullPointerException
}
}
}


//メインでは... (※例外処理は省略)
String fileName = "res/img/sample.jpg"; // "assets/res/img/sample.jpg" となる
Bitmap bitmap = loadBitmapAsset(fileName, this); //this は起動した Activity が良い(Context)

 例外処理は手抜きしてるので、必要あれば適当に。SDカードだろうが、内部ストレージだろうが、「ストリームを開く→デコード」すれば良いだけなので、応用はいくらでもできるだろう。


(関連記事)
【Android】assets フォルダからテキストファイルを読み込む
【Android】SDカードから画像ファイルを読み込む
【Android】内部ストレージから画像ファイルを読み込む
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ


関連記事

category: Android

thread: プログラミング

janre: コンピュータ

tag: 画像ファイル読み込み  assets 
tb: 0   cm: --


プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop