写位图24位彩色奇数行为

时间:2013-12-08 16:25:29

标签: c image-processing bitmap 24-bit

我在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;
            }
        }
    }
}

这会产生正确的渐变:bitmap gradient

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

我需要了解有关位图的哪些信息才能避免这样的问题?

1 个答案:

答案 0 :(得分:1)

RogerRowland得到了它。当我需要二进制文件时,我正在文本模式下打开文件。