我构建了一个简单的应用程序,您可以选择自己的照片,为它选择一个边框,然后将其保存为图像。我这样做的方法是在父视图中将2个ImageViews添加到彼此之上。然后将此父视图转换为图像并保存。但是,通过这种方式,生成的图像大小取决于设备屏幕大小。如果设备屏幕很小,则会生成一个小的最终图像。
我想要的是创建一个大小为500x800像素的图像文件,无论设备如何。这样做的正确方法是什么?
屏幕上的预览可能很小,但是当我点击保存按钮时,我需要它正好是500x800。
答案 0 :(得分:0)
首先,将您的图片转换为位图:
Bitmap bitmapImage= BitmapFactory.decodeResource(getResources(), R.drawable.large_icon);
或者,如果您有Uri图像,那么使用它将其转换为位图:
Bitmap bitmap = BitmapFactory.decodeFile(imageUri.getPath());
这两个都会为您提供图像的位图。
现在要调整图片大小,请使用以下代码:
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, imageWidth, imageHeight, true);
然后将其转换为文件。
答案 1 :(得分:0)
要添加到Jason Answer,我们发现缩放图像的最佳方法是使用它来向上或向下缩放。
public Bitmap scaleCenterCrop(Bitmap source, int newHeight, int newWidth) {
int sourceWidth = source.getWidth();
int sourceHeight = source.getHeight();
// Compute the scaling factors to fit the new height and width, respectively.
// To cover the final image, the final scaling will be the bigger
// of these two.
float xScale = (float) newWidth / sourceWidth;
float yScale = (float) newHeight / sourceHeight;
float scale = Math.max(xScale, yScale);
// Now get the size of the source bitmap when scaled
float scaledWidth = scale * sourceWidth;
float scaledHeight = scale * sourceHeight;
// Let's find out the upper left coordinates if the scaled bitmap
// should be centered in the new size give by the parameters
float left = (newWidth - scaledWidth) / 2;
float top = (newHeight - scaledHeight) / 2;
// The target rectangle for the new, scaled version of the source bitmap will now
// be
RectF targetRect = new RectF(left, top, left + scaledWidth, top + scaledHeight);
// Finally, we create a new bitmap of the specified size and draw our new,
// scaled bitmap onto it.
Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, source.getConfig());
Canvas canvas = new Canvas(dest);
canvas.drawBitmap(source, null, targetRect, null);
return dest;
}
答案 2 :(得分:0)
请尝试使用以下代码将位图图像保存为自定义高度&宽度,下面是一段代码,可让您调整位图大小。
public Bitmap getResizeBitmap(Bitmap bmp, int newHeight, int newWidth) {
int width = bmp.getWidth();
int height = bmp.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// CREATE A MATRIX FOR THE MANIPULATION
Matrix matrix = new Matrix();
// RESIZE THE BIT MAP
matrix.postScale(scaleWidth, scaleHeight);
// RECREATE THE NEW BITMAP
Bitmap resizeBitmap = Bitmap.createBitmap(bmp, 0, 0, width, height, matrix, false);
return resizeBitmap;
}