在不更改原始宽高比的情况下将位图调整为512x512

时间:2018-12-12 22:32:27

标签: java android bitmap android-bitmap

我有一个创建的位图。大小不具体。有时是120x60,129x800,851x784。它没有特定的值...我想始终将这些位图的大小调整为512x512,但不更改原始图像的宽高比。而且没有作物。新图片必须具有512x512画布,原始图片必须居中且没有任何裁剪。

我正在使用此功能调整位图的大小,但由于图像适合X和Y,因此它使图像变得非常糟糕。我不希望图像同时适合x和y来适合其中之一并保持其长宽比。

 public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) {
        int width = bm.getWidth();
        int height = bm.getHeight();
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        // CREATE A MATRIX FOR THE MANIPULATION
        Matrix matrix = new Matrix();
        // RESIZE THE BIT MAP
        matrix.postScale(scaleWidth, scaleHeight);

        // "RECREATE" THE NEW BITMAP
        Bitmap resizedBitmap = Bitmap.createBitmap(
                bm, 0, 0, width, height, matrix, false);
        bm.recycle();
        return resizedBitmap;
    }

我有什么;

enter image description here

我想要什么;

enter image description here

1 个答案:

答案 0 :(得分:0)

好的,所以你真的很亲近。我现在无法测试,但是基本上需要更改的是

1)您需要对X和Y应用相同的比例,因此需要选择较小的比例(如果不可行,请尝试较大的比例)。

matrix.postScale(Math.min(scaleWidth, scaleHeight), Math.min(scaleWidth, scaleHeight));

2)结果将是一个位图,其中至少一侧为512px大,另一侧较小。因此,您需要添加填充以使该边适合512像素(即居中的左右,上/下)。为此,您需要创建所需大小的新位图:

Bitmap outputimage = Bitmap.createBitmap(512,512, Bitmap.Config.ARGB_8888);

3),最后取决于resizedBitmap的哪一侧是512像素,您需要将resizedBitmap绘制到outputImage中的正确位置

Canvas can = new Canvas(outputimage);
can.drawBitmap(resizedBitmap, (512 - resizedBitmap.getWidth()) / 2, (512 - resizedBitmap.getHeight()) / 2, null);

请注意,512 - resizedBitmap.getWidth()会产生0,因此在尺寸正确的一侧不会出现填充。

4)现在返回outputImage