首先,我了解使用inJustDecodeBounds
和inSample
大小加载大小接近所需大小的位图的建议方法。然而,这是一种相当广泛的方法,只能使图像接近目标。
我已经利用options.inDensity
和options.inTargetDensity
来欺骗原生加载器将图像更精确地缩放到所需的目标大小。基本上我将options.inDensity
设置为图像的实际宽度,并将options.inTargetDensity
设置为所需的宽度,我确实得到了所需大小的图像(在这种情况下,宽高比恰好保持不变)。然后,我在生成的图像上设置image.setDensity(DENSITY_NONE)
,所有图像都可以正常工作。
任何人都知道这种方法有什么问题吗?关于记忆效率和图像质量的任何想法?
答案 0 :(得分:0)
我总是通过Opengl 2.0和表面视图获得更好的图像管理。
答案 1 :(得分:0)
听起来很棒! (不能相信android开发人员编写代码但没有以合理且合理的方式公开功能。)
我确实有一个问题。我有充分的理由相信Android无法处理任何维度中大于2048x2048像素的实例化位图。如果执行重新缩放的内部代码不够智能,则在加载大于2048x2048的位图时可能会失败。
答案 2 :(得分:0)
我正在考虑这个问题,使用inDensity和inTargetDensity在解码时放大/缩小位图。它工作得很好,但遗憾的是它会产生非常糟糕的性能(动画)效果。我希望我可以使用它作为“通用”方法来扩大/缩小解码,类似于inSampleSize,遗憾的是仅用于下采样。看起来有不同的原生实现:inSampleSize表现良好,没有明显的性能影响,其中inDensity / inTargetDensity引入了显着的性能影响(如慢动作)。
或者我错过了什么?