0

私は使用してみました:

//decodes image and scales it to reduce memory consumption
private Bitmap decodeFile(File f)
{
    try {
        //Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f),null,o);

        //The new size we want to scale to
        final int REQUIRED_SIZE=70;

        //Find the correct scale value. It should be the power of 2.
        int scale=1;
        while(o.outWidth/scale/2>=REQUIRED_SIZE && o.outHeight/scale/2>=REQUIRED_SIZE)
            scale*=2;

        //Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize=scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    } catch (FileNotFoundException e) {}
    return null;
}

それから

R.drawable.image = decodeFile(R.drawable.image);

このメソッドを使用する方法? R.drawable.image は整数であるため、エラーが発生します。ファイルをデコードするにはどうすればよいですか? textview に 240kb の画像を追加します。

4

4 に答える 4

1

R.drawable.imageは整数だと言いましたが、それを a を受け入れるメソッドに渡してから、戻り値 (a ) をFileそれに代入しようとしています。Bitmap

さらに、そのようにキャッチFileNotFoundExceptionして飲み込むのは本当に悪い考えです。メソッドが例外をスローする可能性があることを宣言しないのはなぜですか?

あなたが本当にやろうとしていること、または実際に何R.drawable.imageを達成しようとしているのかは明らかではありませんが、あなたが持っている方法を使用するには、File.

于 2012-08-27T18:16:20.367 に答える
1

ドローアブルをファイルに変換してから、そのファイルをビットマップに変換しようとしていますか?

これにより、ドローアブル権をビットマップにデコードできます。

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image );
于 2012-08-27T18:22:52.410 に答える
0

私はあなたがこのようなものを探しているかもしれないと思います:

Resources res = getResources();
Drawable image = res.getDrawable(R.drawable.image);

Android では、 Resources クラスを使用してドローアブル フォルダー内の画像にアクセスできます。また、さまざまな解像度の画像にさまざまなフォルダーを使用して、スケーリングも処理します。android:srcさらに、xml で定義されたウィジェットがある場合は、属性を使用してその方法でソース ドローアブルを割り当てることができますandroid:src="@drawable/image"。を見てみましょう

http://developer.android.com/guide/topics/resources/drawable-resource.html

http://developer.android.com/training/multiscreen/screensizes.html

Android で画像を処理する方法と、OS が適切にスケーリングされた画像を選択するのにどのように役立つかについて、それぞれの詳細については、 を参照してください。

編集:もう1つ、ImageViewなどの画像リソースを設定しようとしているだけの場合imageView.setImageResource(R.drawable.image)は、コードでDrawableまたはResourcesオブジェクトを作成する必要がないように使用できます。ただし、画像を設定する前に何かを行う必要がある場合は、対応するメソッドsetImageDrawablesetImageBitmapメソッドがあります。

于 2012-08-27T18:30:57.957 に答える
0

VM で 6291456 バイトを割り当てられない

画像は非圧縮で約 6 メガバイトです。http://developer.android.com/training/displaying-bitmaps/index.html を参照してください

そして、メモリが不足しているように見えるために必要になる可能性のあるその画像の縮小版をロードしたい場合は、次のコードで動作します

/** decodes image from resources to max maxSize x maxSize pixels */
private Bitmap decodeFile(Context context, int resId, int maxSize) {
    Resources res = context.getResources();
    // Decode image size
    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(res, resId, o);

    // Find the correct scale value. It should be the power of 2.
    int scale = 1;
    while (o.outWidth / scale / 2 >= maxSize && o.outHeight / scale / 2 >= maxSize)
        scale *= 2;

    // Decode with inSampleSize
    o.inJustDecodeBounds = false;
    o.inSampleSize = scale;
    return BitmapFactory.decodeResource(res, resId, o);
}
于 2012-08-27T18:39:31.053 に答える