使用大图像时出现OutOfMemoryException

时间:2012-08-13 10:41:11

标签: android image out-of-memory

我试图从我的Android应用程序在Facebook墙上发布图像。为此我从layout.Here是我的代码

创建了一个位图。
                    System.gc();
            Bitmap bitmap = Bitmap.createBitmap(
                    view.getMeasuredWidth(),
                    view.getMeasuredHeight(),
                    Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            Drawable bgDrawable = newLinearLayout.getBackground();
            if (bgDrawable != null)
                bgDrawable.draw(canvas);
            else
                canvas.drawColor(Color.WHITE);
            view.draw(canvas);
            Matrix matrix = new Matrix();
            // resize the bit map
            matrix.postScale(1.0f, 1.0f);

            // recreate the new Bitmap
            Bitmap resizedBitmap = null;
            resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
                    bitmap.getWidth(), bitmap.getHeight(), matrix, true);
            //Canvas resizedCanvas = new Canvas(resizedBitmap);

            if (bitmap != null) {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                resizedBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
                Bundle parameters = new Bundle();
                byte[] data = baos.toByteArray();
                parameters.putByteArray("picture", data);
                DataKeeper.getInstance().setBundleToPost(parameters);

            }
            bitmap.recycle();

它显示 OutOfMemory异常。我知道这是由于imagesize超出了其可用大小。我如何调整图片大小而不会降低其质量?我尝试使用 BitmapFactory.Options 更正此问题。但是不起作用。如何解决这个例外?

此致   阿沙

3 个答案:

答案 0 :(得分:0)

使用它:

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);

有关详细信息,请参阅此链接

link

答案 1 :(得分:0)

@Zaz Gmy的想法是正确的,
但是我认为inSampleSize的值对于每个图像都不应该是常数(8)。

这当然可行,但在同一比例因子= 8下使用不同分辨率缩放不同图像会导致某些图像质量明显下降。

相反,应根据图片的目标inSimpleSizewidth生成height

Android documentation提供了一篇关于如何处理此问题的好文章。

答案 2 :(得分:0)