1

首先,我知道使用inJustDecodeBoundsinSamplesize 以接近所需大小的大小加载位图的推荐方法。然而,这是一种相当广泛的方法,只能获得与目标近似的图像。

我想利用options.inDensityoptions.inTargetDensity欺骗本机加载程序将图像更精确地缩放到所需的目标大小。基本上我设置options.inDensity为图像的实际宽度和options.inTargetDensity所需的宽度,我确实得到了所需尺寸的图像(在这种情况下,纵横比恰好保持不变)。然后我设置image.setDensity(DENSITY_NONE)生成的图像,一切似乎都可以正常工作。

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

4

3 回答 3

0

对我来说听起来很棒!(不敢相信 android 开发人员编写了代码,但没有以理智和明智的方式公开功能)。

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

于 2013-02-16T19:47:23.380 回答
0

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

于 2013-02-16T19:07:39.803 回答
0

我自己也在考虑这个问题,使用 inDensity 和 inTargetDensity 在解码时放大/缩小位图。它运行良好,但不幸的是它会产生非常糟糕的性能(动画)结果。我希望我可以将其用作“通用”方法来按比例放大/缩小解码,类似于 inSampleSize,不幸的是它仅用于下采样。似乎有不同的原生实现:inSampleSize 表现良好,没有明显的性能影响,其中 inDensity/inTargetDensity 引入了显着的性能影响(如慢动作)。

还是我错过了什么?

于 2013-02-18T12:49:34.400 回答