gpt4 book ai didi

c++ - 太阳光栅图像 : Why 1 byte row padding when width is odd?

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:15 25 4
gpt4 key购买 nike

这可能不是特定于 SO 的,但似乎缺乏关于太阳栅格标准的信息。 (Even JWZ is frustrated by this!)

简介:Sun raster standard表示像素行在末尾有填充,使得一行中的位数是 16 的因数(即偶数字节)。例如,如果您有一个 7 像素宽的 24 位图像,一行通常需要 7 * 3 = 21 个字节,但太阳光栅会将其填充为 22 个字节,因此位数可以被 16 整除。代码下面针对任意宽度的 24 位图像实现了这一点:

row_byte_length = num_cols * 3;
row_byte_length += width_in_bytes % 2;

这是我的问题:对于 24 位图像,Imagemagick 和 Gimp 都遵循这个规则,但是对于 32 位图像,它做了一些我不明白的奇怪事情。由于位深度给出 4 字节像素,任何图像宽度每行将占用偶数个字节,这始终符合“16 位对齐”规则。但是当他们计算行长度时,他们为奇数宽度的图像添加一个额外的字节,使行长度为奇数(即行的位数不能被 16 整除)。下面的代码描述了他们对 32 位图像所做的工作:

row_byte_length = num_cols * 4 + num_cols % 2;

添加 1 似乎违反了 sun 格式指定的“16 位对齐”规则,并且没有明显的目的。但是,我确定如果 Gimp 和 Imagemagick 这样做,我一定是误读了太阳光栅规范。

是否有任何 Sun 光栅专家知道为什么这样做?

编辑我的错误,Gimp 最多只能输出 24 位 Sun 光栅。看起来这只是一个 Imagemagick 问题,所以可能是一个错误。我将其标记为关闭;最好在 ImageMagick 论坛上进行讨论。

最佳答案

我会说 Gimp 和 ImageMagick 中的图像加载代码有一个错误。就这么简单。

请记住,SUN-Raster 格式并未得到广泛使用。您很可能是最早尝试使用此格式的人之一,发现它无法按预期工作并且没有忽略它。

如果规范。说的是:无论宽度如何,存储的扫描线都四舍五入到 16 位的倍数,这样就没有太多的解释空间了。

关于c++ - 太阳光栅图像 : Why 1 byte row padding when width is odd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1753029/

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