Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用大图像时OutOfMemoryException_Android_Image_Out Of Memory - Fatal编程技术网

Android 使用大图像时OutOfMemoryException

Android 使用大图像时OutOfMemoryException,android,image,out-of-memory,Android,Image,Out Of Memory,我试图从我的android应用程序在Facebook墙上发布一张图片。为此,我从布局创建了一个位图。这是我的代码 System.gc(); Bitmap bitmap = Bitmap.createBitmap( view.getMeasuredWidth(), view.getMeasuredHeight(),

我试图从我的android应用程序在Facebook墙上发布一张图片。为此,我从布局创建了一个位图。这是我的代码

                    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异常。我知道这是由于图像大小超过了其可用大小。我如何调整图像大小而不损失其质量?我尝试使用BitmapFactory.Options来更正此问题。但不起作用。如何解决此异常

问候 Asha

使用以下方法:

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);
有关更多详细信息,请参阅此链接


Zaz Gmy的想法是正确的,
然而,我不认为对于每幅图像,
inSampleSize
的值应该是常量(8)

这当然会起作用,但在相同比例因子=8的情况下缩放不同分辨率的图像会导致某些图像的质量明显下降

相反,应根据图像的目标
宽度
高度
生成
inSimpleSize


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

请检查此教程并下载示例项目。这将解决您的问题


布局内容的“我想要位图”可能重复。在这种情况下,如何使用位图预览\u bitmap=BitmapFactory.decodeStream(is,null,options);但这是另一个问题,不是这个线程特有的。无论如何,请查看此线程,了解如何从内容中保存位图: