缩放位图保持纵横比并适应宽度和高度

Pab*_*emé 3 android bitmap scale scaletype

我想缩放保持纵横比的位图,但适合所需的尺寸。这个答案会缩放位图并保持纵横比,但会留下一些空白,除非图像是完美的正方形。我需要填写宽度和高度,就像FIT_XY一个scaleType属性的ImageView

Pab*_*emé 6

根据波士顿街道的回答,我制作了这种方法,可以将任何位图缩放并返回到所需的宽度和高度,适合两个维度(没有空格!)。它会自动适应更多水平或更多垂直的图像。

public Bitmap resizeBitmapFitXY(int width, int height, Bitmap bitmap){
    Bitmap background = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    float originalWidth = bitmap.getWidth(), originalHeight = bitmap.getHeight();
    Canvas canvas = new Canvas(background);
    float scale, xTranslation = 0.0f, yTranslation = 0.0f;
    if (originalWidth > originalHeight) {
        scale = height/originalHeight;
        xTranslation = (width - originalWidth * scale)/2.0f;
    }
    else {
        scale = width / originalWidth;
        yTranslation = (height - originalHeight * scale)/2.0f;
    }
    Matrix transformation = new Matrix();
    transformation.postTranslate(xTranslation, yTranslation);
    transformation.preScale(scale, scale);
    Paint paint = new Paint();
    paint.setFilterBitmap(true);
    canvas.drawBitmap(bitmap, transformation, paint);
    return background;
}
Run Code Online (Sandbox Code Playgroud)