0

ユーザーがギャラリーから選択した画像をImageView.

問題は、これらの画像が非常に大きくなる場合があることです。

元。、3648 X 2736

画像が 2048 X 2048 より大きいかどうかを確認した後、高さを変更してサイズを変更する方法がありますが、機能しません。(まだつぶれます):

呼び出し:

if(mPhoto.getHeight()>=2048||mPhoto.getWidth()>=2048){

   image.setImageBitmap(scaleDownBitmap(mPhoto,200));

そしてメソッド自体:

public  Bitmap scaleDownBitmap(Bitmap photo, int newHeight) {

        final float densityMultiplier = getResources().getDisplayMetrics().density;

        int h= (int) (newHeight*densityMultiplier);
        int w= (int) (h * photo.getWidth()/((double) photo.getHeight()));

        photo=Bitmap.createScaledBitmap(photo, w, h, true);

        return photo;
        }

メソッドが実行されるとは思いません...画像がファイルからフェッチされるとすぐに、OutOfMemoryクラッシュが発生します。

私は何をすべきか?

画像を設定した行を . で囲ってもクラッシュしtry{}catch{}ます。

画像はドローアブル フォルダーのリソースではありません。カメラ、ギャラリー、またはインターネットから来ます。

メモリの上限に近づいている可能性があることはわかっています。明らかなことには答えないでください。問題は、どうすれば解決できるかです。

一部の大きな画像は一部のデバイスで動作します (大量のメモリを搭載した新しいデバイス)

例の場合。同じイメージが Galaxy s4 で機能しますが、Galaxy s1 がクラッシュします。

私はこれに対する解決策を見つけることができませんでした...

どうもありがとうございました!

4

3 に答える 3

1

BitmapFactory.Optionsパラメーターを使用してBitmapFactoryメソッドを調べます。これにより、イメージを適切かつ効率的にスケーリングしてメモリ不足を回避できます。

于 2013-09-21T21:55:38.177 に答える