我已经在很长一段时间内一直在寻找解决这个问题的方法,而且还没有找到符合我需求的东西。
我想在保持宽高比的同时将位图缩放到特定大小。 可以把它想象成在ImageView中使用fitCenter缩放位图,只在新的位图中。
源位图必须适合具有特定大小的目标位图,其余像素必须是透明的。
我尝试过像这样使用Glide:
Glide.with(context).load(url)
.asBitmap()
.override(1280, 720)
.fitCenter()
.into(1280, 720)
.get();
但是这个方法返回一个只适合宽度(或高度)并包装大小的位图。
我听说过使用Canvas是一种可能的解决方案,但是没有找到任何方法来实现我的目标。
非常感谢任何帮助或见解。如果要求,我会发布任何必要的澄清。
答案 0 :(得分:0)
我设法使用此功能解决了它:
Bitmap resizeBitmap(Bitmap image, int destWidth, int destHeight) {
Bitmap background = Bitmap.createBitmap(destWidth, destHeight, Bitmap.Config.ARGB_8888);
float originalWidth = image.getWidth();
float originalHeight = image.getHeight();
Canvas canvas = new Canvas(background);
float scaleX = (float) 1280 / originalWidth;
float scaleY = (float) 720 / originalHeight;
float xTranslation = 0.0f;
float yTranslation = 0.0f;
float scale = 1;
if (scaleX < scaleY) { // Scale on X, translate on Y
scale = scaleX;
yTranslation = (destHeight - originalHeight * scale) / 2.0f;
} else { // Scale on Y, translate on X
scale = scaleY;
xTranslation = (destWidth - originalWidth * scale) / 2.0f;
}
Matrix transformation = new Matrix();
transformation.postTranslate(xTranslation, yTranslation);
transformation.preScale(scale, scale);
Paint paint = new Paint();
paint.setFilterBitmap(true);
canvas.drawBitmap(image, transformation, paint);
return background;
}