如何在Android中创建固定大小的图像文件?

时间:2017-09-22 07:18:03

标签: java android

我构建了一个简单的应用程序,您可以选择自己的照片,为它选择一个边框,然后将其保存为图像。我这样做的方法是在父视图中将2个ImageViews添加到彼此之上。然后将此父视图转换为图像并保存。但是,通过这种方式,生成的图像大小取决于设备屏幕大小。如果设备屏幕很小,则会生成一个小的最终图像。

我想要的是创建一个大小为500x800像素的图像文件,无论设备如何。这样做的正确方法是什么?

屏幕上的预览可能很小,但是当我点击保存按钮时,我需要它正好是500x800。

3 个答案:

答案 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;
}