【问题标题】:Writing bitmap 24 bit color odd behavior写入位图 24 位颜色奇怪的行为
【发布时间】:2013-12-25 16:23:25
【问题描述】:

我正在用 c 编写自己的位图生成器,但遇到了一些我无法弄清楚的行为。

我将像素数据存储在我编写的像素结构的二维数组中。我将我的结构直接写入标题之后的文件中。

typedef struct {
    uint8_t blue;
    uint8_t green;
    uint8_t red;
} pixel_24;

纯色位图工作正常,但在尝试生成渐变时遇到了问题。图像出现损坏。经过一些实验后,我发现任何包含 r、g 或 b 值为 10 的像素的图像都会显示损坏。我改变了我的代码以避免我的颜色通道中的所有 10 都是这样的:

void load_pixels(pixel_24 pixels[VSIZE][HSIZE])
{
    unsigned int y, x;

    for (y = 0; y < VSIZE; y++)
    {
        for (x = 0; x < HSIZE; x++)
        {
            uint8_t b = (x+y)/4;
            uint8_t g = 255 - (x+y)/4;
            uint8_t r = 0;
            pixels[y][x] = (pixel_24) {b, g, r};
            if (b==10)
            {
                pixels[y][x].blue = 9;
            }
            if (g==10)
            {
                pixels[y][x].green = 9;
            }
            if (r==10)
            {
                pixels[y][x].red = 9;
            }
        }
    }
}

这会产生正确的渐变:

当我删除 if 语句时,我得到:

为了避免此类问题,我需要了解有关位图的哪些信息?

【问题讨论】:

  • 随机猜测,但 10 是换行符 (\n) - 您是否有机会以文本模式而不是二进制模式打开输出文件?如果是这样,它可能会将每个10 替换为\r\n 序列。
  • @RogerRowland:这绝对是问题所在!
  • 就是这样。忽略stride将是他的下一个问题。
  • 做到了。只需将模式更改为“wb”就可以了。
  • @HansPassant 详细说明?

标签: c image-processing bitmap 24-bit


【解决方案1】:

罗杰罗兰明白了。当我需要二进制文件时,我正在以文本模式打开文件。

【讨论】:

    猜你喜欢
    • 2013-07-21
    • 2022-11-25
    • 2012-06-16
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多