可以将图像解码为位图,但是为什么呢?

Decode image to bitmap ok, but why?

我想知道为什么我们需要将 png 解码为位图以显示图像。 为什么不像那样显示 png(编码)。

我故意在这里问一个白痴类型的问题。我很清楚不可能像那样显示编码图像,但我想知道为什么以及如何在屏幕上显示图像,因为这很容易做到:

canvas.drawBitmap(((AndroidImage)Image).bitmap, x, y, null);

我想了解它的全部内容。我猜我们需要一个一个地显示每个像素,但我想要更多细节。

知道怎么做很容易,但很难理解为什么。

如果有人 course/tuto/article/explanation 可以解释它...我将不胜感激

提前致谢

PS : 请不要回复 "you need to decode/convert png to bitmap" 我知道...那不是我的问题

有很多原因。 'a value in a file' 和 'a pixel on a screen' 之间并没有真正的直接关系。

  1. 您需要知道位图的宽度和高度。您无法从图像大小推断出这一点——它必须存储在图像文件中的某个位置。 (或其他任何地方。要点是,你必须知道 它的大小。)
  2. 您需要了解位图的位深度和颜色模型。例如,您无法有意义地将 8 位索引图像直接复制到接受 32 位 BGR 排序且未使用字节的屏幕上。
  3. 您的示例 PNG file format 指定压缩所有图像数据。这是出于一个合理的原因:PNG 格式是为在网页上使用而设计的,在那个时代每个字节仍然很重要。但即使是低级简单的 BMP 文件格式也使用非常特殊的 'encoding' 形式:在其 24 位格式中,每一行都包含每个像素的 BGR 值集 是在末尾填充足够的字节,使其总长度可以被 4 整除。
  4. JPEG 使用更高级的编码方案(很难用几句话来解释),因此它可以进一步压缩图像。高级编码方案比常规方法允许更多的压缩(这反过来意味着 'values in the file' 和 'pixels on the screen' 之间只有最小的关系)。