C 写入位图24位颜色奇数行为
我正在用c编写自己的位图生成器,遇到了一些我无法理解的行为 我将像素数据存储在我编写的像素结构的2D数组中。我在头文件之后直接将结构写入文件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,如
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?