Android,解码大位图而不会损失质量/分辨率并具有良好的用户体验

时间:2014-05-07 08:38:19

标签: android image bitmap

我知道这是一个很受欢迎的问题,但我没有找到适合我情况的解决方案,我只想获得建议。

我有一个图像,例如4000 x 3000像素(或更大一点),如果我尝试解码它,我得到OutOfMemory错误。我发现的几乎所有解决方案都假设在解码期间使用inSampleSize选项,之前使用某些特殊逻辑计算。它在官方的android文档(有效地加载大位图)中进行了描述。

但是,当我不会失去图像的质量和分辨率时,我正在寻找这种方法,同时我会为用户提供良好的体验。所以我考虑按部分解码位图,但是在互联网上有很多讨论,这表明用这种方法给用户提供良好(流畅)的体验是不可能的(使用当前显示边界和缩放设置解码图像部分会慢一点。

我对最大图像分辨率和质量非常感兴趣,因为我的应用程序正在进行一些测量,并且让用户能够以原始分辨率工作(缩放,移动,指向)非常重要。

请问您能否建议第二种方法足够顺畅,以便为用户提供良好的体验,还是有其他适合我情况的好方法?

1 个答案:

答案 0 :(得分:1)

如果你真的想要提供高质量的图像,平滑移动等等,ImageView和使用Android sdk的常规方法对你没有帮助。 我建议您使用OpenGL作为您的目的,看看AndEngine,它是游戏引擎,但您只能使用它的一些方法来创建一个大图像的屏幕。 AndEngine实现起来非常简单,只需将其作为任何其他库添加到您的项目中。

其他选项是在没有任何Android SDK引擎的情况下使用OpenGL:http://developer.android.com/guide/topics/graphics/opengl.html

这是一个使用OpenGL显示大纹理(图像)的简单算法:

  1. 将图像拆分为500x500等小图像(如果要支持OpenGL 1,图像应为2的幂,如512x512)
  2. 使用您想要的尺寸创建相机(建议您使用屏幕尺寸创建)
  3. 只需在render()方法中绘制所有小图片
  4. 移动时只需移动相机即可。
  5. P.S链接到AndEngine - http://www.andengine.org/