我想将a缩放Bitmap到与运行时相关的宽度和高度,其中保持纵横比并Bitmap填充整个宽度并使图像垂直居中,裁剪多余部分或用0像素填充间隙.
我目前正在通过创建Bitmap所有0像素像素并在其Bitmap上绘制图像,缩放到指定的宽度并保持纵横比来自己重绘位图,但是,它最终会丢失/搞砸像素数据.
我是这样做的:
Bitmap background = Bitmap.createBitmap((int)width, (int)height, Config.ARGB_8888);
float originalWidth = originalImage.getWidth(), originalHeight = originalImage.getHeight();
Canvas canvas = new Canvas(background);
float scale = width/originalWidth;
float xTranslation = 0.0f, yTranslation = (height - originalHeight * scale)/2.0f;
Matrix transformation = new Matrix();
transformation.postTranslate(xTranslation, yTranslation);
transformation.preScale(scale, scale);
canvas.drawBitmap(originalImage, transformation, null);
return background;
Run Code Online (Sandbox Code Playgroud)
是否有一个库或一些更好的代码可以做得更好?我希望图像看起来尽可能清晰,但我知道我的功能不会提供很好的结果.
我知道我可以通过使用整数缩放而不是浮动缩放来保持图像保持良好,但我需要宽度为100%填充.
此外,我知道一个ImageView人的Gravity.CENTER_CROP能力,但也使用整数缩放,因此当它不应该时,它会切断图像的宽度.