在android中使用图像的有效方法(`bitable`的`bitmap`)

时间:2011-03-10 09:21:42

标签: android image

图像总是给我带来问题:(。 即使我使用非常小的图片, java.lang.OutOfMemoryError: bitmap size exceeds VM budget - android 也是主要问题 请向我推荐使用Image的一些提示。 (链接,教程,示例项目等......)

我的一些问题是

  1. 我应该选择哪个Drawablebitmap
  2. BitmapFactory.decodeFileDrawable.createFromPath
  3. BitmapFactory.decodeStreamDrawable.createFromStream
  4. 旋转时如何保留DrawableBitmap
  5. 保存或通过DrawableBitmap通过意图
  6. 是一个好主意

2 个答案:

答案 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的原始图像),或者我们可以通过指定原始位图的坐标来解码它。 (例如每个季度的坐标)