C ++: запись нуля в файл .bmp

Я пытаюсь прочитать файл .bmp, изменить его растровые значения и записать в другой файл .bmp.

Насколько я знаю, каждая «строка» пикселей заканчивается нулем, но проблема в том, что, когда я пытаюсь записать это нулевое значение, происходит сбой программы.

for (j = 0; j < height * mCoeff; j++)
{
for (k = 0; k < width * mCoeff; k++)
{
fwrite(&newBitmap[j][k].red, 1, 1, output);
fwrite(&newBitmap[j][k].green, 1, 1, output);
fwrite(&newBitmap[j][k].blue, 1, 1, output);
}
fwrite(0, 1, 1, output); //crashes here
}

Окно ошибок: http://puu.sh/7Cxn1.png

Что я должен изменить, чтобы правильно писать?

1

Решение

frwite() принимает указатель в качестве первого аргумента. Вы проходите 0, которая оказывается константой нулевого указателя — поэтому ваша программа разыменовывает этот нулевой указатель и выполняет проверку утверждения.

Вам нужно передать указатель в качестве первого аргумента:

char zero = 0;
fwrite(&zero, 1, 1, output);
7

Другие решения

Первый параметр fwrite должен быть const void* указатель, указывающий на буфер, который содержит данные для записи. Вы передаете нулевое значение указателя (0) который разыменовывается внутри fwrite, что приводит к неопределенному поведению.

Вам нужен правильный объект, содержащий ноль:

char c = 0;
fwrite(&c, 1, 1, output);
3

Насколько я знаю, каждая «строка» пикселей заканчивается нулем

Это неверно, строки развертки заполнены 4 байтами.

Там должно быть 0, 1, 2 или 3 байта в конце, так что scanlinesize % 4 == 0

2

fwrite(0, 1, 1, output);

Вы пишете недопустимый (нулевой) указатель. Попробуйте написать это как символ:

char stringEnd = 0; //char 0 = \0
fwrite(&stringEnd, 1, 1, output);
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector