【问题标题】:Viewing a small region of a Large Image in Android在 Android 中查看大图像的小区域
【发布时间】: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 通过使用 ma​​lloc/new 在本机 C 代码中分配的内存。但我不知道怎么做?

所以让事情更清楚我想要的是可以将图像放大/缩小到全分辨率的东西。如果可能的话,它应该是平滑的,或者至少可以在一个单独的线程中完成。

如果我需要使用 OpenGL,也请给我一个示例代码。

【问题讨论】:

    标签: android graphics memory-limit


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-13
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 2019-05-27
      • 2014-11-04
      • 1970-01-01
      相关资源
      最近更新 更多