显示高质量图像 - 位图大小超出 VM 预算错误
我需要创建一个画廊类型的应用程序。我需要在哪里显示许多图像并给出缩放和滑动效果。
现在我正在使用 android.widget.Gallery
并将图像设置为我的画廊 Adapter
的 getview
中的 imageview
类(扩展 BaseAdapter
)。我使用位图设置图像,它是由以下代码设置的
Bitmap mBitmap = BitmapFactory.decodeFile(imagePathArray.get(position));
imageview.setImageBitmap(mBitmap);
出现以下错误
ERROR/AndroidRuntime(12184): FATAL EXCEPTION: main
ERROR/AndroidRuntime(12184): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
它一开始工作正常,但在移动到第三个或第四个图像后,应用程序崩溃,并在decodeFile语句中
。当我搜索位图大小超出虚拟机预算
时,我得到了很多解决方案,例如android-奇怪的内存不足问题。但所有解决方案都会降低图像质量。
以更少的内存显示高质量图像且不会导致位图大小超出虚拟机预算
的最佳方法是什么?
有什么建议吗?
谢谢
I need to create a gallery type application. Where i need display many image and give the zooming and sliding effects.
Now I am using android.widget.Gallery
and setting the image to imageview
in the getview
of my gallery Adapter
class (extends BaseAdapter
). Me set image using bitmap, which is set by the following code
Bitmap mBitmap = BitmapFactory.decodeFile(imagePathArray.get(position));
imageview.setImageBitmap(mBitmap);
It works fine at first, but after moving to third or fourth image the application crash with the following error
ERROR/AndroidRuntime(12184): FATAL EXCEPTION: main
ERROR/AndroidRuntime(12184): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
at the decodeFile statement.
When i searched for bitmap size exceeds VM budget
, i got a lot of solutions like android-strange-out-of-memory-issue. But all solutions are reducing the image quality.
What is the best method to display image in good quality and with less memory, that will not cause bitmap size exceeds VM budget
?
Any suggestion?
Thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您唯一的解决方案是以较小的尺寸加载位图(BitmapFactory.Options 允许您在加载时重新采样位图),或者尝试回收您可能已加载但不再需要的其他大位图。
The only solution you have is to load your bitmap at a smaller size (BitmapFactory.Options lets you resample a bitmap at load time), or try to recycle other large bitmaps you may have loaded and that you don't need anymore.