1

总而言之,这就是我想要做的:

我想将 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,也请给我一个示例代码。

4

1 回答 1

0

这是我自己想出来的。:)

它不是最好的方法,但效果很好。

我在本机代码中创建了位图,并使用 Skia 图形库访问了其区域的子集。(这意味着我正在访问私有 API,它的功能很容易被较新的 Android 版本破坏)。

http://code.google.com/p/skia/

我必须在我的 C++ 代码中链接这个库并通过 JNI 访问这个功能。

于 2011-05-25T11:57:40.777 回答