调整图像大小?

时间:2018-10-09 06:30:16

标签: java android

我正在尝试以编程方式获取大尺寸图像,但是应用程序崩溃了。 这是我在做什么:

public static Bitmap getImageFromResult(Context context, int resultCode, Intent imageReturnedIntent) {
    Bitmap bitmap = null;
    File imageFile = getTempFile(context);

    if (resultCode == Activity.RESULT_OK) {
        Uri selectedImage;
        boolean isCamera = (imageReturnedIntent == null || imageReturnedIntent.getData() == null || imageReturnedIntent.getData().toString().contains(imageFile.toString()));

        if (isCamera) {
            // From Camera
            selectedImage = Uri.fromFile(imageFile);
        } else {
            // From Storage
            selectedImage = imageReturnedIntent.getData();
        }

        //bitmap = getResizedImage(context, selectedImage);
        bitmap = getResizedImage(context, selectedImage);

    }
    return bitmap;
}

还有resize方法`:

//*********** Resize to avoid using too much Memory loading Big Images (2560*1920) ********//

private static Bitmap getResizedImage(Context context, Uri selectedImage) {
    Bitmap resizedBitmap = null;
    int[] sampleSizes = new int[]{8,7,6,5, 4, 3, 2, 1};

    int i = 0;
    do {
        resizedBitmap = decodeBitmap(context, selectedImage, sampleSizes[i]);
        i++;

    } while (resizedBitmap.getWidth() < minWidthQuality && i < sampleSizes.length);

    return resizedBitmap;
}

2 个答案:

答案 0 :(得分:0)

尝试一下-您可以将位图的大小调整为其他高度/宽度

 public static Bitmap getResizedBitmap(Bitmap bm, float newHeight, float newWidth) {
        float width = bm.getWidth();
        float height = bm.getHeight();
        float scaleWidth = (newWidth) / width;
        float scaleHeight = (newHeight) / height;
        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);
        return Bitmap.createBitmap(bm, 0, 0, (int) width, (int) height, matrix, false);
    }

然后只需创建新的位图

 Bitmap bitmap = BitmapFactory.decodeFile(pathname);
 Bitmap newBitmap = getResizedBitmap(bitmap,400,320);

答案 1 :(得分:0)

如果您要从Internet上获取图像,那么显然您需要先下载图像,但是这会根据互联网速度而花费一些时间,或者您要从内存中加载图像,则可以应用此stack over answer 降低图像质量的方法