我是bitmap的新手。我知道如何在android中调整大小或缩放位图。但问题是假设我的图像是100x500或任何高度& width.Now我想在100x100之类的方块中调整它。如何可能
请帮帮我。
答案 0 :(得分:6)
对于这个简单的情况,最合理的是将源图像转换为中间,然后在新的Canvas上再次绘制Bitmap。此类型的调整大小在Android中称为center crop。中心裁剪的想法是产生填满整个边界的最大图像,并且不会改变纵横比。
您可以自己实现此功能,以及其他类型的大小调整和缩放。基本上,您使用Matrix发布更改,例如缩放和移动(翻译),然后在考虑了Matrix的Canvas上绘制原始位图。
这是我从另一个答案中采用的一种方法(无法找到正确的信息):
public static Bitmap scaleCenterCrop(Bitmap source, int newHeight, int newWidth)
{
int sourceWidth = source.getWidth();
int sourceHeight = source.getHeight();
float xScale = (float) newWidth / sourceWidth;
float yScale = (float) newHeight / sourceHeight;
float scale = Math.max(xScale, yScale);
//get the resulting size after scaling
float scaledWidth = scale * sourceWidth;
float scaledHeight = scale * sourceHeight;
//figure out where we should translate to
float dx = (newWidth - scaledWidth) / 2;
float dy = (newHeight - scaledHeight) / 2;
Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, source.getConfig());
Canvas canvas = new Canvas(dest);
Matrix matrix = new Matrix();
matrix.postScale(scale, scale);
matrix.postTranslate(dx, dy);
canvas.drawBitmap(source, matrix, null);
return dest;
}
答案 1 :(得分:1)
int dstWidth = 100;
int dstHeight = 100;
boolean doFilter = true;
Bitmap scaledBitmap = Bitmap.createScaledBitmap(src, dstWidth, dstHeight, doFilter);
答案 2 :(得分:0)
对wsanville的代码做了一些修改......它对我有用 请注意,我使用的是最小比例(采用最小比例,以便整个位图可以在屏幕上呈现..如果我采用最大比例,那么它可能会超出屏幕
int sourceWidth = mBitmap.getWidth();
int sourceHeight = mBitmap.getHeight();
float xScale = (float) newWidth / sourceWidth;
float yScale = (float) newHeight / sourceHeight;
float scale = Math.min(xScale, yScale);
//get the resulting size after scaling
float scaledWidth = scale * sourceWidth;
float scaledHeight = scale * sourceHeight;
//figure out where we should translate to
float dx = (newWidth - scaledWidth) / 2;
float dy = (newHeight - scaledHeight) / 2;
Matrix defToScreenMatrix = new Matrix();
defToScreenMatrix.postScale(scale, scale);
defToScreenMatrix.postTranslate(dx, dy);
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, sourceWidth, sourceHeight, defToScreenMatrix, false);