我正在尝试在 @colt-mcanlis 之后使用 inDensity
和 inTargetDensity
调整位图大小' 在 1 解释说明, 2和 3 .
到目前为止一切都很好,很好的文档,很棒的视频。问题是图像的最终尺寸对我来说毫无意义。
例如,如果我使用以下值:
srcWidth
为 11774px,srcHeight
为 6340pxdstWidth
为 1440px,dstHeight
为 2392px
我使用的代码是:
options.inScaled = true;
options.inSampleSize = 8;
options.inDensity = srcWidth;
options.inTargetDensity = dstWidth * 8;
options.inSampleSize;
imageBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.image, options);
结果图像的宽度为 70px,高度为 38px,而不是 1440x2393。
我在不使用 inSampleSize
的情况下进行了尝试,得到了非常相似的结果。然后我假设问题出在 inTargetDensity
和 inDensity
上。
我查看了文档并发现了以下内容:
inDensity
int inDensity The pixel density to use for the bitmap...
据我所知,要计算密度,我需要宽度、高度和显示尺寸,但在这种情况下显示尺寸对我来说没有意义,因为我只想计算 inDensity
和 inPixelDensity
独立于显示尺寸。
那么,我在这里做错了什么?
最佳答案
我正在关注 Loading Large Bitmaps Efficiently按照书上的说法,但遇到了解码位图最终具有比原始图像更大的尺寸(options.outWidth/options.outHeight)的问题。
我注意到在“解码边界”步骤之后,inTargetDensity 的值大于 inDensity,最终发现这是解码位图较大的原因。不确定什么时候在这个领域玩任何不同的东西会有用......
但是在“解码边界”步骤之后设置 options.inTargetDensity = options.inDensity
可以使位图以预期的大小(根据您计算的 inSampleSize)进行解码。
期待 Romain Guy 在 Google I/O(2018 年)上宣布的“更直接”的 API :D
关于android - 使用 inDensity 和 inTargetDensity 调整位图大小的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41129354/