0

サイズが 1024x1024.png のビットマップがあり、別のデバイス画面で引き伸ばす必要があるため、これを使用してみました:

// given a resource, return a bitmap with a specified maximum height
public static Bitmap maxHeightResourceToBitmap(Context c, int res,
        int maxHeight) {
    Bitmap bmp = imageResourceToBitmap(c, res, maxHeight);


    int width = bmp.getWidth();
    int height = bmp.getHeight();

    int newHeight = maxHeight;
    int newWidth = maxHeight / 2;

    // calculate the scale - in this case = 0.4f
    float scaleHeight = ((float) newHeight) / height;
    float scaleWidth = ((float) newWidth) / width;

    // createa matrix for the manipulation
    Matrix matrix = new Matrix();
    // resize the bit map
    matrix.postScale(scaleWidth, scaleHeight);

    // recreate the new Bitmap and return it
    return Bitmap.createBitmap(bmp, 0, 0, width, height, matrix, true);
}

// given a resource, return a bitmap with a specified maximum height
public static Bitmap scaleWithRatio(Context c, int res,
        int max) {
    Bitmap bmp = imageResourceToBitmap(c, res, max);

    int width = bmp.getWidth();
    int height = bmp.getHeight();

    // calculate the scale - in this case = 0.4f
    float scaleHeight = ((float) max) / height;
    float scaleWidth = ((float) max) / width;

    // createa matrix for the manipulation
    Matrix matrix = new Matrix();
    // resize the bit map
    matrix.postScale(scaleWidth, scaleHeight);

    // recreate the new Bitmap and return it

    return Bitmap.createBitmap(bmp, 0, 0, width, height, matrix, true);
4

1 に答える 1

0

画面上でビットマップを引き伸ばすには、ビットマップをオリジナルのままメモリに保持することをお勧めします (いずれにしても、ビットマップ自体を大きくしないでください)。

次に、通常は を使用して画面に表示するときに、画像ビューをにImageView設定できます(詳細については、ドキュメントを参照してください)。これにより、画像を描画するときに画面上で画像が引き伸ばされ、ImageView 全体に表示されます。また、それに応じて LayoutParameters を設定して、ImageView が画面全体を占めるようにします (たとえば、親を塗りつぶします)。ScaleTypeFIT_XY

メモリ内のビットマップのサイズを変更する唯一の本当の理由は、ビットマップを小さくしてメモリを節約することです。Android デバイスのヒープには制限があり、メモリ内のビットマップが大きすぎるとヒープ全体がいっぱいになり、OutOfMemory エラーが発生するため、これは重要です。メモリの問題が発生している場合は、このチュートリアルを参照してください。

于 2013-07-21T10:43:45.897 に答える