Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 写入位图24位颜色奇数行为_C_Image Processing_Bitmap_24 Bit - Fatal编程技术网

C 写入位图24位颜色奇数行为

C 写入位图24位颜色奇数行为,c,image-processing,bitmap,24-bit,C,Image Processing,Bitmap,24 Bit,我正在用c编写自己的位图生成器,遇到了一些我无法理解的行为 我将像素数据存储在我编写的像素结构的2D数组中。我在头文件之后直接将结构写入文件 typedef struct { uint8_t blue; uint8_t green; uint8_t red; } pixel_24; 纯色位图工作正常,但我在尝试生成渐变时遇到了问题。这些图像被破坏了。经过一些实验,我发现任何包含r、g或b值为10的像素的图像都会显示损坏。我修改了我的代码以避免我的颜色通道中的所有10,如

我正在用c编写自己的位图生成器,遇到了一些我无法理解的行为

我将像素数据存储在我编写的像素结构的2D数组中。我在头文件之后直接将结构写入文件

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;
            }
        }
    }
}
void load_像素(像素_24像素[VSIZE][HSIZE])
{
无符号整数y,x;
对于(y=0;y
这将产生正确的渐变:

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


关于位图,我需要知道什么才能避免类似的问题?

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

随机猜测,但是
10
是一个换行符(
\n
)-您是否以文本模式而不是二进制文件打开输出文件?如果是这样,它可能会用
\r\n
序列替换每个
10
。@RogerRowland:这肯定是问题所在!就这样。忽视大步将是他的下一个问题。就是这样。刚刚把模式改为“wb”就成功了。@HansPassant?