Я пишу свой собственный растровый генератор в c, и я столкнулся с каким-то поведением, которое я не могу понять.Запись растрового изображения 24-битное цветное нечетное поведение
Я храню пиксельные данные в 2D-массиве структуры пикселей, которую я написал. Я пишу свои структуры непосредственно в файл после заголовков.
typedef struct {
uint8_t blue;
uint8_t green;
uint8_t red;
} pixel_24;
Растровые изображения сплошного цвета работали правильно, но при попытке создания градиентов я столкнулся с проблемой. Изображения выходили из строя. После некоторых экспериментов я обнаружил, что любое изображение, содержащее пиксель с величиной r, g или b, будет выглядеть поврежденным. Я изменил мой код, чтобы избежать всех 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;
}
}
}
}
Это дает правильный градиент:
Когда я извлекаю если заявления, которые я получаю:
Что я нужно знать о растровых изображениях, чтобы избежать подобных проблем?
Случайное предположение, но '10' - символ новой строки (' \ n') - вы случайно открываете свой выходной файл в текстовом режиме, а не в двоичном формате? Если это так, он может заменять каждую '10' на последовательность' \ r \ n'. –
@RogerRowland: Это определенно проблема здесь! –
Вот и все. Игнорирование * шага * будет его следующей проблемой. –