gpt4 book ai didi

bitmap - 与 RLE 位图中的字边界对齐 : contradiction in Microsoft documentation

转载 作者:行者123 更新时间:2023-12-02 08:10:57 25 4
gpt4 key购买 nike

微软的Bitmap Compression文档,特别是 BI_RLE8(使用行程编码压缩的 8 位索引颜色)的描述,包括以下绝对模式的描述:

In absolute mode, the first byte is zero and the second byte is a value in the range 03H through FFH. The second byte represents the number of bytes that follow, each of which contains the color index [into a color table] of a single pixel. [...] In absolute mode, each run must be aligned on a word boundary.

据推测,这意味着奇数长度的运行必须用零填充(尽管未指定,但我假设在此上下文中单词的长度为 16 位)。

但是,文档中的示例包含奇数长度的运行,且不以字边界结束:

[03 04] [05 06] [00 03 45 56 67] [02 78] [00 02 05 01] [02 78] [00 00] [09 1E] [00 01] 

00 03 45 56 67应该是00 03 45 56 67 00吗?

最佳答案

我修改了一个 8 位索引颜色位图,结果似乎表明运行确实应该用零填充以在 16 位字边界上结束(因此 00 03 45 56 67 应该是 00 03 45 56 67 00 )。

详细信息:

  • 在 Microsoft Paint(版本 1607,包含在 Windows 10 中)中,我创建了一个 4x4 位图,其中包含按以下排列的红色 (R)、绿色 (G) 和蓝色 (B) 像素:

    BRBR
    BBBB
    GGBB
    RRRG
  • 我将文件另存为 256 色位图(没有使用索引颜色或行程编码的选项)。
  • 我在 Gnu 图像处理程序 (GIMP) 中打开该文件,将颜色模式更改为索引(通过“图像”>“模式”>“索引”),并将其导出为“Windows BMP”,选中“运行长度编码” “选项。
  • 我复制了该文件并在 HxD(十六进制编辑器)中打开它。
  • 在此阶段,像素数据表示如下(请注意,根据文档,图像从左下角开始,从左到右):

    03 4F // Three red pixels
    01 71 // One green pixel
    00 00 // EOL
    00 04 71 71 E8 E8 // GGBB
    00 00 // etc.
    04 E8
    00 00
    00 04 E8 4F E8 4F
    00 01 // EOF
  • 在像素数据区域的开头,我替换了 03 4F (在编码模式中指定了三个红色像素;请注意,红色已映射到颜色表中的索引 0x4F = 79) 00 03 4F 4F 4F (在绝对模式下指定的三个红色像素,没有零填充),更新了 header 中的文件大小,并保存了更改。
  • 在 GIMP 和 Paint 中打开时,修改后的文件渲染不正确:前两行中的像素和右下角的像素为黑色,第三行中的最后两个像素为绿色而不是蓝色。
  • 在 HxD 中,我更改了 00 03 4F 4F 4F00 03 4F 4F 4F 00 (在绝对模式下指定三个红色像素,添加零字节以结束 16 位字边界上的运行),更新 header 中的文件大小,并保存文件。
  • 当在 GIMP 中打开时,文件现在可以正确渲染。在 Paint 中打开时,顶行是黑色的(我怀疑我忽略了更新 Paint 使用的标题字段,但 GIMP 不使用),但除此之外图像是正确的。

关于bitmap - 与 RLE 位图中的字边界对齐 : contradiction in Microsoft documentation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46349718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com