我需要使用自定义尺寸调整图像大小。图像来自设备相机或画廊,我厌倦了下面的代码,但图像被拉伸,我需要方形的图像,没有任何拉伸。
public Bitmap decodeSampledBitmapFromFile(Bitmap bm, int boundBoxInDp) {
boundBoxInDp=300;
int height = bm.getHeight();
int width = bm.getWidth();
float scaleWidth = ((float) boundBoxInDp) / width;
float scaleHeight = ((float) boundBoxInDp) / height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height,
matrix, false);
return resizedBitmap;
}
答案 0 :(得分:1)
如果您已有位图,则可以使用以下代码调整大小:
Bitmap originalBitmap = <original initialization>;
Bitmap resizedBitmap = Bitmap.createScaledBitmap(originalBitmap, newWidth, newHeight, false);
或者您可以使用以下库来调整图像大小
答案 1 :(得分:1)
这不适合你的图像在一个边界框(其失败可能是你所谓的“拉伸”)。它不会处理方形边框中的矩形位图,也不会处理比边界框小的图像。你可能想要这样的东西:
public Bitmap decodeSampledBitmapFromFile(Bitmap bm, int boundBoxInDp) {
boundSquareInPx=convertToPixels(300);
int maxDimen = Math.max(bm.getHeight(), bm.getWidth())
float scale = (maxDimen <= boundSquareInPx) ? 1 : boundSquareInPx / (float) maxDimen;
float scaleWidth = scale * bm.getWidth();
float scaleHeight = scale * bm.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height,
matrix, true);
return resizedBitmap;
}
很少有人注意到:如果您的图像小于您的图像,则不适合它 - 显而易见的修改就是这样。
其次,dp!= px; Bitmap
对象返回px,因此您将不得不从dp转换为px(在其他地方有详细记录)。
如果您需要将相应裁剪的位图居中,请使用postTranslate(...)
。
文档为here;这个 已经是我知道在Android中调整大小的最好的库 - 我从来不需要任何其他东西,而且我已经在游戏中使用了一段时间并经常使用它。
在我看来,如果您需要有效使用API的最佳介绍:请阅读ImageView和Drawable
个实例的源代码;一个非常有价值的个人开发练习是使用SDK来实现一个中心裁剪的渐变过渡可绘制,因为这是令人讨厌的Android库中唯一缺少的东西之一,并且会涉及很多类型的编码,你正试图在上面做。
<强> NB:强>
正如您将注意到的,另一位回答者指出createScaledBitmap
的存在,这可能是更清晰的代码;我只想指出你所做的事情基本上是正确的以及如何改进。
最佳。
答案 2 :(得分:0)