我希望将一个Bitmap
按照运行时的宽度和高度进行缩放,保持纵横比并使Bitmap
填充整个宽度,并使图像垂直居中,可以通过裁剪多余部分或填充0 alpha像素来填补空隙。
我目前是通过创建所有alpha为0像素的Bitmap
并在其上绘制图像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;
有没有可以更好地完成这项任务的库或代码呢?我希望图像尽可能清晰,但我知道我的函数效果不太好。
我知道我可以使用整数缩放来保持图像的清晰度,而不是浮点缩放,但我需要宽度填充满100%。
此外,我知道ImageView
的Gravity.CENTER_CROP
功能,但它也使用整数缩放,因此在不应该裁剪的情况下也会切断图像的宽度。