图像总是给我带来问题:(。
即使我使用非常小的图片, java.lang.OutOfMemoryError: bitmap size exceeds VM budget - android
也是主要问题
请向我推荐使用Image的一些提示。 (链接,教程,示例项目等......)
我的一些问题是
Drawable
或bitmap
BitmapFactory.decodeFile
或Drawable.createFromPath
BitmapFactory.decodeStream
或Drawable.createFromStream
Drawable
和Bitmap
。 Drawable
或Bitmap
通过意图答案 0 :(得分:2)
所有这些都取决于您对图像的确切要求。 bitmapfactory用于创建位图。当你想画一些东西时使用和绘制对象:)
在内存中创建位图后,您想对该位图做什么?
至于旋转,你应该注意onRestoreInstanceState和onSaveInstanceState。像这样的东西:
private static final String PHOTO_TAKEN = "photo_taken";
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (savedInstanceState.getBoolean(PHOTO_TAKEN)) {
// do something if you have your pic here
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putBoolean(PHOTO_TAKEN, mPhotoTaken); // saving the state of the image (if the photo is taken or not in this case)
}
至于通过额外内容...我打赌这是一个坏主意,因为你已经超出了存储异常....你可以传递对该图像的引用,如路径ID或其他内容。
更新:
在其中一个项目中,我试图在ImageView中显示从凸轮上拍摄的图像控制我的活动并得到了那个outofmemory异常。原因是它将整个大图像放入记忆中。解决方法很简单:我缩小了图像大小:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap bitmap = BitmapFactory.decodeFile(mImagePath, options);
答案 1 :(得分:0)
为了避免内存不足错误,我们可以使用BitmapRegionDecoder(解码大于最大纹理限制2048x2048的原始图像),或者我们可以通过指定原始位图的坐标来解码它。 (例如每个季度的坐标)