在android中使用图像的有效方法(`Drawable`of`bitmap`)
形象总是给我制造麻烦:(。在android中使用图像的有效方法(`Drawable`of`bitmap`),android,image,Android,Image,形象总是给我制造麻烦:(。 java.lang.OutOfMemoryError:位图大小超过VM预算-即使我使用非常小的图像,android也是主要问题。 请给我推荐一些使用图像的技巧。(链接、教程、示例项目等) 我的一些爱好是 我应该选择哪个Drawable还是bitmap BitmapFactory.decodeFile或Drawable.createFromPath BitmapFactory.decodeStream或Drawable.createFromStream 如何在旋转时保持
java.lang.OutOfMemoryError:位图大小超过VM预算-即使我使用非常小的图像,android也是主要问题。
请给我推荐一些使用图像的技巧。(链接、教程、示例项目等)
我的一些爱好是
我应该选择哪个Drawable
还是bitmap
BitmapFactory.decodeFile
或Drawable.createFromPath
BitmapFactory.decodeStream
或Drawable.createFromStream
如何在旋转时保持可绘制
和位图
保存或通过intent传递Drawable
或Bitmap
是个好主意吗
这完全取决于您对图像的具体操作。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控件中显示从cam拍摄的图像,但我的活动中出现了outofmemory异常。原因是它把整个大形象都记在了记忆里。解决方法非常简单:我减小了图像大小:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap bitmap = BitmapFactory.decodeFile(mImagePath, options);
为了避免内存不足错误,我们可以使用BitMapRegionCoder(对大于最大纹理限制2048x2048的原始图像进行解码),也可以通过指定原始位图的坐标对其进行解码。(例如每个季度的坐标)已经有很多帖子了。是的,有很多。我找了很多。但是我没有得到正确的答案。至少我的问题是我应该使用Drawable
还是Bitmap
我使用了你的更新,最终还是会出现内存泄漏。如果你只做了一次,你不会注意到,但更多的处理,它会被注意到。