【问题标题】:Calculate size of pixel array of image using RGBA32 pixel format使用 RGBA32 像素格式计算图像像素数组的大小
【发布时间】:2012-03-11 10:38:57
【问题描述】:

我有一个简单的图像,它存储了宽度、高度、像素格式和其他一些我不确定的东西,然后是像素数据。

我被告知像素格式是 RGBA32,其余数据只是像素数据。

计算公式是什么? 据我了解,每种 RGBA 颜色需要 8 位,因此每个像素需要 4 个字节。

那么我会得出结论,像素数组的大小是宽 * 高 * 4,但这还不够。

【问题讨论】:

  • 你怎么知道这还不够?为什么不发布您拥有的额外数据?
  • 谁/什么为您提供了这张图片?如果这是一种特定的图像格式,我猜可能存在某种标头或校验和或元数据或 cmets。
  • 我的宽度和高度为 64 * 64,总像素数据大小为 21760。当我读取 21760 字节并显示它时,它看起来很好。当我只读取 64 * 64 * 4 时,是错误的。
  • 你能提供一个数据样本吗?前 10 个字节左右应该特别关键,好像是标准的图像格式,可能有一个 header。
  • 我反转了二进制格式,但我从未做过图像格式,所以这个图像是由朋友提供的,作为“训练”格式,因为它应该是一种非常简单的格式。标头仅以宽度和高度的两个整数开头,以及其他 3 个仅为 -1 的整数,然后是像素数据。我想他只是很快就把东西扔在一起了。我想有一个简单的公式可以用来计算我需要读取的数据的大小。

标签: image pixel


【解决方案1】:

带有 RGBA32 的 64 像素 x 64 像素 BMP 通常为 16440 字节(假设为 BITMAPV3INFOHEADER)。标头 56 字节,像素数据 16384 字节(即 64*64*4)。 header size can vary though 和 124 字节 (BITMAPV5HEADER) 假定为标准 BMP。

我猜你有以下一项或多项来解释你额外的 ~5376 (21760 - 16384) 字节:

  • 完整性检查(校验和、CRC 等)
  • 标头比您目前假设的要长
  • 不是 4 个字节的像素对齐方式
  • 元数据(cmets、EXIF 数据、GPS 数据等)
  • ICC 颜色配置文件
  • 数据缺口

无论如何,我会首先检查 last 16384 (64 * 64 * 4) 字节的数据,这可能是您的图像数据所在的位置(如果这种格式在 BMP 格式之后并且没有一些尾随元数据或 ICC 配置文件或完整性检查)。附带说明一下,RGBA 数据通常以 alpha 字节在前 (ARGB) 存储。

可能值得看看这个diagram of the BMP file format,只是为了让自己熟悉一个常见的图像格式的结构。

【讨论】:

    猜你喜欢
    • 2021-09-20
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多