Androidでは、メモリ不足エラーが発生することなく、SDカードから(任意のサイズの)画像をどのように表示しますか?
最初にメディアストアに画像を配置する必要がありますか?
擬似コードの例をいただければ幸いです。表示される画像がデバイスのメモリレベルが許す限り大きい場合は、追加のポイント。
Androidでは、メモリ不足エラーが発生することなく、SDカードから(任意のサイズの)画像をどのように表示しますか?
最初にメディアストアに画像を配置する必要がありますか?
擬似コードの例をいただければ幸いです。表示される画像がデバイスのメモリレベルが許す限り大きい場合は、追加のポイント。
編集:この質問は、ビットマップオブジェクトに画像をロードしているときに、メモリ不足の問題で実際にすでに回答されています(最も投票数の多い2つの回答)。オプションも使用しinSampleSize
ますが、適切な値を自動的に取得するための小さな方法があります。
私の最初の答え:
クラスのinSampleSize
は問題を解決できます( http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize)。これは、元の幅と高さの1 /のビットマップを作成することで機能するため、メモリ消費量が(^ 2?)削減されます。使用する前にドキュメントを読む必要があります。BitmapFactory.Options
inSampleSize
inSampleSize
例:
BitmapFactory.Options options = new BitmapFactory.Options();
// will results in a much smaller image than the original
options.inSampleSize = 8;
// don't ever use a path to /sdcard like this, but I'm sure you have a sane way to do that
// in this case nebulae.jpg is a 19MB 8000x3874px image
final Bitmap b = BitmapFactory.decodeFile("/sdcard/nebulae.jpg", options);
final ImageView iv = (ImageView)findViewById(R.id.image_id);
iv.setImageBitmap(b);
Log.d("ExampleImage", "decoded bitmap dimensions:" + b.getWidth() + "x" + b.getHeight()); // 1000x485
inSampleSize
ただし、ここでは、許可されたメモリのサイズの^ 2倍までの画像に対してのみ機能し、小さな画像の品質を低下させます。秘訣は、適切なinSampleSizeを見つけることです。
コードを使用して任意のサイズの画像を表示しています:
ImageView imageView=new ImageView(this);
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
imageView.setAdjustViewBounds(true);
FileInputStream fis=new FileInputStream(file);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize=2; //try to decrease decoded image
options.inPurgeable=true; //if necessary purge pixels into disk
options.inScaled=true; //scale down image to actual device density
Bitmap bm=BitmapFactory.decodeStream(is, null, options);
imageView.setImageBitmap(bm);
fis.close();
例えば:
yourImgView.setImageBitmap(BitmapFactory.decodeFile("/sdcard/1.jpg"));
http://www.developer.com/ws/other/article.php/3748281/Working-with-Images-in-Googles-Android.htmは、画像の取得を含む、画像の主題について知る必要があるすべてをカバーしています。 SDカードからそれら。以下にコピーされた、そのためのコードに気付くでしょう。
try {
FileOutputStream fos = super.openFileOutput("output.jpg",
MODE_WORLD_READABLE);
mBitmap.compress(CompressFormat.JPEG, 75, fos);
fos.flush();
fos.close();
} catch (Exception e) {
Log.e("MyLog", e.toString());
}