我想将 a 缩放Bitmap
到与运行时相关的宽度和高度,其中保持纵横比并Bitmap
填充整个宽度并垂直居中图像,要么裁剪多余的部分,要么用 0 alpha 像素填充间隙。
我目前正在自己重绘位图,方法是创建一个Bitmap
所有 0 的 alpha 像素并在其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% 填充宽度。
另外,我知道 anImageView
的Gravity.CENTER_CROP
功能,但是,它也使用整数缩放,因此它会在不应该的时候切断图像的宽度。