【问题标题】:Bitmap size greater than width and height位图大小大于宽度和高度
【发布时间】: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);

标签: android memory bitmap


【解决方案1】:

一个 PNG 最多可以有 4 个通道 (ARGB),因此您的实际内存消耗将是 width*height*4,因为每个像素需要 4 个内存空间。

您几乎可以对任何其他图像格式进行类似的计算:width*height*channels

【讨论】:

  • 是的,对于 PNG 文件。但是,为什么位图内存大小 > (bitmap.width * bitmap.height)?
  • 好吧..可能是我的误解..文件的大小是 9 MB == 1920 * 1280 * 4 ?
  • @Shagan 频道数量很重要。 (1920*1280*4)/(1024*1024) = 9.3MB
猜你喜欢
  • 2017-12-08
  • 2017-06-10
  • 2013-04-28
  • 2014-01-09
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 2017-02-02
相关资源
最近更新 更多