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,您可以将图像视图设置ScaleTypeFIT_XY(有关更多信息,请参阅文档)。当绘制它以填充整个 ImageView 时,这将在屏幕上拉伸图像。还要确保您的 ImageView 通过相应地设置其 LayoutParameters 来填充整个屏幕(例如填充父级)。

在内存中调整位图大小的唯一真正原因是使它们更小以节省内存。这很重要,因为 Android 设备的堆有限,如果位图的内存太大,它们会填满整个堆,并且会遇到 OutOfMemory 错误。如果您遇到内存问题,请参阅本教程。

于 2013-07-21T10:43:45.897 回答