2013-02-16 50 views
1

首先,我知道使用inJustDecodeBoundsinSample大小的加载位图大小接近所需大小的推荐方法。然而,这是一个相当宽泛的方法,只能获得接近目标的图像。缩放大位图替代方法

我尽管已经利用options.inDensityoptions.inTargetDensity诱骗本地加载程序将图像更精确地缩放到所需的目标大小。基本上,我将options.inDensity设置为图像的实际宽度,并将options.inTargetDensity设置为所需的宽度,并且确实获得了所需尺寸的图像(在此情况下纵横比恰好保持相同)。然后在结果图像上设置image.setDensity(DENSITY_NONE),并且全部显示工作正常。

任何人都知道这种方法有什么问题吗?有关内存效率和图像质量的任何想法?

+0

听起来很棒! (不能相信android devs编写代码,但没有以合理和明智的方式公开功能)。 – 2013-02-16 19:42:45

+0

听起来很酷!你可以请一个样品吗? – 2013-02-16 19:52:06

+0

我认为虽然使用inSample更多的性能优化,不是吗?因为CPU/GPU更容易以这种方式处理采样,不是吗? – 2013-02-16 20:01:07

回答

0

我一直使用Opengl 2.0和表面视图获得更好的图像管理。

0

听起来很棒! (不能相信android devs编写代码,但没有以合理和明智的方式公开功能)。

我确实有一个问题。我有充分的理由相信Android无法处理任何维度中大于2048x2048像素的实例化位图。如果执行重新缩放的内部代码不够智能,则加载大于2048x2048的位图时可能会失败。

+0

我想可以将InSampleSize与这种方法结合起来。未经测试,但如果您可以在InSampleSize效果之后计算图像的最终尺寸,并在options.inDensity中使用它,则可能会有效。 – user1016143 2013-02-17 11:20:15

0

我正在考虑这个我的自我,使用inDensity和inTargetDensity在解码上放大/缩小位图。它运行良好,但不幸的是它会产生非常差的性能(动画)结果。我希望我可以使用这个作为“普遍”的解决方案来扩大/缩小解码,类似于inSampleSize,不幸的是只用于下采样。似乎有不同的本地实现:inSampleSize性能良好,没有明显的性能影响,inDensity/inTargetDensity引入了明显的性能影响(如慢动作)。

或者我错过了什么?

+0

我建议如果内存允许的话,建议在内存中预先缩放图像以获得高效动画。 – user1016143 2013-02-18 17:07:52