【发布时间】:2013-05-11 16:28:31
【问题描述】:
我正在尝试将图像 (PNG) 加载到 ImageView。 此 PNG 文件的文件大小为 390.6KB。
一旦我将此 PNG 文件解码为位图,位图大小将 >9MB。 但是位图的宽度和高度分别是 1920 和 1280。
为什么位图的大小> ( bitmap.width * bitmap.height )? 9MB 对于我的应用程序来说已经很多了,它会加载许多其他类似的图像。
当我尝试通过给出样本大小 (2/4) 来对该图像进行采样时,图像的宽度和高度会随着位图的大小而变化。
如何在内存大小中缩放此图像,但保留图像的宽度和高度?
【问题讨论】:
-
正如我在帖子中提到的,我尝试使用 2 和 4 的 inSampleSize 缩小图像,这确实减少了图像的内存大小,但同时减少了图像的宽度/高度从 1920/1280 到 960/640 的图像。这是不希望的。
-
我想了解为什么位图的内存大小大于(bitmap.width * bitmap.height)。正如我想象的那样,这里没有压缩。
-
您是否完整阅读了链接中的帖子。 Load a Scaled Down Version into Memory 下的文档有几品脱值得注意。例如,如果 1024x768 像素的图像最终会在 ImageView 中以 128x96 像素的缩略图显示,那么就不值得将其加载到内存中。
-
如果你在画布上绘制位图,你可以做 canvas.drawBitmap(bitmap, matrix, null);其中矩阵是一个缩放矩阵。例如matrix.postScale(xScale, yScale);