1

我已经使用位图转换了图像(字符串 url),但有时它会产生内存不足错误。这是我的代码:

        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f),null,o);

        //Find the correct scale value. It should be the power of 2.
        final int REQUIRED_SIZE=150;
        int width_tmp=o.outWidth, height_tmp=o.outHeight;
        int scale=1;
        while(true){
            if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
                break;
            width_tmp/=2;
            height_tmp/=2;
            scale++;
        }

        //decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize=scale;
4

2 回答 2

0
    BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
            bmpFactoryOptions.inJustDecodeBounds = true;
            bmpFactoryOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
            try {
                bmp = BitmapFactory
                        .decodeStream(
                                getContentResolver().openInputStream(
                                        imageFileUri), null, bmpFactoryOptions);
                bmpFactoryOptions.inSampleSize = quality;
                System.out.println("The Quality is" + quality);
                bmpFactoryOptions.inJustDecodeBounds = false;
                bmp = BitmapFactory
                        .decodeStream(
                                getContentResolver().openInputStream(
                                        imageFileUri), null, bmpFactoryOptions);
} catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            String[] orientationColumn = { ImageColumns.ORIENTATION };
            @SuppressWarnings("deprecation")
            Cursor cur = managedQuery(imageFileUri, orientationColumn, null,
                    null, null);
            int orientation = -1;
            if (cur != null && cur.moveToFirst()) {
                orientation = cur.getInt(cur
                        .getColumnIndex(orientationColumn[0]));
            }
            Matrix matrix = new Matrix();
            matrix.postRotate(orientation);
            bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(),
                    bmp.getHeight(), matrix, true);
            view.setImageBitmap(bmp);

国际质量 = 4;

发现它对大位图更有效。

于 2013-08-13T07:13:10.973 回答
0

首先,缩小图像的大小。您可以在不大幅改变质量的情况下做到这一点。对于实验,只需尝试将图像保存为位图。你会感到震惊。例如,如果您的 jpg 大小为 3MB,则转换为 bmp 后将约为 21MB - 巨大的数字!

于 2013-08-13T07:07:25.610 回答