Android 更改位图尺寸而不修改纵横比

Android 更改位图尺寸而不修改纵横比,android,bitmap,image-resizing,Android,Bitmap,Image Resizing,有没有办法在不拉伸位图的情况下增加位图的宽度(或高度)?基本上,我有一个200x100的位图,我想通过在左边附加50个(白色/透明)像素,在右边附加50个像素,使其成为正方形(200x200) 我不想在屏幕上绘制此位图,因此,理想情况下,我应该以“智能”的方式使用变换矩阵或类似的方法,但我就是想不出来…您可以尝试以下方法: // creating a dummy bitmap Bitmap source = Bitmap.createBitmap(100, 200

有没有办法在不拉伸位图的情况下增加位图的宽度(或高度)?基本上,我有一个200x100的位图,我想通过在左边附加50个(白色/透明)像素,在右边附加50个像素,使其成为正方形(200x200)


我不想在屏幕上绘制此位图,因此,理想情况下,我应该以“智能”的方式使用变换矩阵或类似的方法,但我就是想不出来…

您可以尝试以下方法:

        // creating a dummy bitmap
        Bitmap source = Bitmap.createBitmap(100, 200, Bitmap.Config.ARGB_8888);
        Bitmap background;
        Canvas canvas;

        if(source.getHeight() == source.getWidth()) // do nothing
            return;

        // create a new Bitmap with the bigger side (to get a square)
        if(source.getHeight() > source.getWidth()) {
            background = Bitmap.createBitmap(source.getHeight(), source.getHeight(), Bitmap.Config.ARGB_8888);
            canvas = new Canvas(background);
            // draw the source image centered
            canvas.drawBitmap(source, source.getHeight()/4, 0, new Paint());
        } else {
            background = Bitmap.createBitmap(source.getWidth(), source.getWidth(), Bitmap.Config.ARGB_8888);
            canvas = new Canvas(background);
            // draw the source image centered
            canvas.drawBitmap(source, 0, source.getWidth()/4, new Paint());
        }

        source.recycle();
        canvas.setBitmap(null);
        // update the source image
        source = background;
注意:黑色边框不是图像的一部分。我选择深红色作为背景色,以查看图像的实际大小,并将其与黑色和源图像的颜色(始终画在中间)区分开来

通过在画布上绘制,它在屏幕上不可见。我使用ImageView只是为了测试代码

这是我得到的w=200,h=100的输出:

这是我得到的w=100,h=200的输出: