【发布时间】:2011-04-30 11:13:16
【问题描述】:
总的来说,这就是我想要做的:
我想将 5 兆像素图像的 100x100 区域(任何部分)加载到 Android Bitmap 类中,以便我可以将其绘制到画布元素上 就这么简单。这就是我想做的一切。就是这样。而已。一点也不差。听起来很简单。因此,在你得意洋洋之前,请继续往下阅读。
我知道这个问题已经被问了一百万次了。我也做了功课,研究它。不幸的是,我从各个方面都陷入了死胡同。也许我需要把我的问题说清楚。
Android VM 允许您分配的堆数量存在限制。因此,使用以下功能无法加载大型位图,即使是来自自己相机(我拥有 Nexus S)的位图。
BitmapFactory.decodeStream(InputStream is)
是的,我可以使用 BitmapFactory.Options 来缩放它,但是我应该如何放大呢?
现在我正在尝试设计一个可以平滑放大/缩小图像的图像查看器。显然,如果我什至无法加载图像,那是不可能的。
在姜饼中,我们有一个新类 BitmapRegionDecoder ,但我正在为 Froyo 设计我的应用程序。所有这些类都与使用 Skia 2D 图形库的本机 api 挂钩。 Android NDK 也不提供对这些 api 的访问权限。也许有一种方法可以手动构建 Skia 并使用它来加载 java 位图。但我不确定如何?
它似乎已经在这个应用程序中解决了 (http://blog.javia.org/how-to-work-around-androids-24-mb-memory-limit/) - https://market.android.com/details?id=image.viewer 通过使用 malloc/new 在本机 C 代码中分配的内存。但我不知道怎么做?
所以让事情更清楚我想要的是可以将图像放大/缩小到全分辨率的东西。如果可能的话,它应该是平滑的,或者至少可以在一个单独的线程中完成。
如果我需要使用 OpenGL,也请给我一个示例代码。
【问题讨论】:
标签: android graphics memory-limit