Android 使用大图像时OutOfMemoryException
我试图从我的android应用程序在Facebook墙上发布一张图片。为此,我从布局创建了一个位图。这是我的代码Android 使用大图像时OutOfMemoryException,android,image,out-of-memory,Android,Image,Out Of Memory,我试图从我的android应用程序在Facebook墙上发布一张图片。为此,我从布局创建了一个位图。这是我的代码 System.gc(); Bitmap bitmap = Bitmap.createBitmap( view.getMeasuredWidth(), view.getMeasuredHeight(),
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);但这是另一个问题,不是这个线程特有的。无论如何,请查看此线程,了解如何从内容中保存位图: