【问题标题】:Android: Refining zoomable PictureAndroid:细化可缩放图片
【发布时间】:2013-08-06 07:59:44
【问题描述】:

长期以来,我一直在为能够缩放的大图像而苦苦挣扎。我正在从网络加载一些大小可变的图片:它可能从 0.5MP 到 10MP。由于 OOM 异常,简​​单地将一个加载到位图可能会导致应用程序崩溃。但是细节非常重要,所以我希望用户能够放大它们以保持完整的质量(因此图片应该在缩放过程中自行优化)。我没有找到合适的方法来做到这一点。我使用了TouchImageView 库,但它根本不管理大图片。如果我首先使用BitmapFactoryinSampleSize 参数对我的图片进行采样,我肯定会失去质量。我不想编写一个全新的缩放工具,因为它已经在默认 Gallery 应用程序中的每个 android 手机上实现。必须有一种使用这种工具的方法,并且只需显示一个能够缩放的大图像,对吧?

【问题讨论】:

  • 您是否查看了 Gallery 应用程序源代码?
  • 我做了,但它是一个非常复杂的应用程序,很难提取我需要缩放的部分。应该有一个更简单的解决方案。

标签: android bitmap out-of-memory zooming


【解决方案1】:
  1. 你试过PhotoView吗?
  2. 您也可以使用标准WebViewloadUrl(String) 来处理大图像。 WebView 具有内置的缩放控件。

【讨论】:

  • PhotoView 是一个非常好的项目,但据我了解,它只管理经典 ImageView 的缩放,这与 ToucheImageView 完全相同。如果图片太大,您必须先对其进行下采样,否则将无法正常工作。这是我要避免的!
  • 然后按照我的建议尝试使用标准android.webkit.WebViewloadUrl(String) 加载图像。到目前为止,我还没有看到任何大图像在使用 OOM 时崩溃。
  • WebView 就像一个魅力!我从来没有想过用它来显示本地图像!我不明白为什么这些选项没有内置在ImageView 中。这将更加直观 1000%。还是谢谢你!
【解决方案2】:

BitmapRegionDecoder(在 2.3.3 中添加)可能会起作用。但我没有尝试过。 看来Gallery中的实现是OpenGL,没办法简单使用。

【讨论】:

  • 我知道BitmapRegionDecoder,但这意味着完全重新实现捏合和缩放机制,这在像Android这样的高级编程框架中没有意义!我建议使用WebView!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多