3

画面の幅によって決まる特定のサイズに常に収まるように、500x500px のリソースを縮小したいと考えています。

現在、Android Developers サイト ( Loading Large Bitmaps Efficiently ) のコードを使用していますが、500x500px リソースをImageView(xml のソースとして)使用しImageView、ビットマップではなくスケーリングするほど品質は良くありません。

Bitmapしかし、それは遅いので、メモリ効率が高く高速になるように もスケーリングしたいと考えています。

編集:スケーリングしたいドローアブルdrawableは、アプリのフォルダーにあります。

Edit2:私の現在のアプローチ。

ここに画像の説明を入力

左の画像は、大きなビットマップを効率的にロードする方法を変更せずに使用したものです。中央の画像は、@Salman Zaidi が提供する方法に少し変更を加えたものですo.inPreferredConfig = Config.ARGB_8888;o2.inPreferredConfig = Config.ARGB_8888;

右の画像は、画像ソースが xml で定義されている imageview で、スケーリングされたビットマップで達成したい品質です。

4

3 に答える 3

6
private Bitmap decodeImage(File f) {
    Bitmap b = null;
    try {
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;

        FileInputStream fis = new FileInputStream(f);
        BitmapFactory.decodeStream(fis, null, o);
        fis.close();

        float sc = 0.0f;
        int scale = 1;
        //if image height is greater than width
        if (o.outHeight > o.outWidth) {
            sc = o.outHeight / 400;
            scale = Math.round(sc);
        } 
        //if image width is greater than height
        else {
            sc = o.outWidth / 400;
            scale = Math.round(sc);
        }

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

ここで、「400」は新しい幅 (画像が縦向きモードの場合) または新しい高さ (画像が横向きモードの場合) です。独自の選択値を設定できます。スケーリングされたビットマップは多くのメモリ スペースを必要としません。

于 2013-01-07T16:22:13.053 に答える
0

このトレーニングを確認してください:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

ビットマップのサイズを効率的に変更する方法を示します

于 2013-01-07T16:47:39.013 に答える