У меня снова проблемы с записью массива в растровое изображение, поэтому в основном я читаю данные из файла .bmp, где я получаю данные пикселей, и я хочу сделать B и R = 0, поэтому вот мой код:
int row_padded = ( Picture.biWidth*3 + 3) & (~3);
unsigned char* data = new unsigned char [row_padded];
unsigned char tmp;
for(int i = 0; i < Picture.biHeight; i++)
{
fread(data, sizeof(unsigned char), row_padded, plik);
for(int j = 0; j < Picture.biWidth*3; j += 3)
{
data[j] = 0;
data[j+2] = 0;
}
}
Теперь, когда у меня B и R = 0, я хочу снова сохранить его в тот же файл, поэтому использую:
for(int j = 0; j< Picture.biHeight; j++)
{
fwrite(data,1,Picture.biWidth, f);
}
но ничего не работает.
хорошо, так что ты имеешь в виду, мне нужно использовать fseek, чтобы перейти в место "Смещение", а затем начать писать свой файл, верно? Но что, мне нужно делать это в цикле и каждый раз возвращаться в место смещения? Я прав?





fwrite(data,1,Picture.biWidth, f) должен быть fwrite(data,1,row_padded, f) нет? иначе записывается только первая треть байтов
примечание: по определению sizeof(unsigned char) равен 1
не работает, я открываю такой файл: FILE * f = fopen ("test.bmp", "r + b");
@ kinket123 ты под виндой? в этом случае вам также нужно добавить 'b', чтобы открыть файл записи ("ш + б"). Размер входного и выходного файлов должен быть одинаковым, так ли?
Есть несколько форматов для файлов BMP. Вы уверены, что входной файл имеет размер 24 бита / 1 байт на цвет?
да, я под Windows, но если я изменю r + b на w + b, он не читает данные об этом bmp файле (заголовок растрового файла и т. д.)
вы не можете открыть в "w + b" для чтения, я просто сказал, что если вам нужно открыть для чтения в двоичном формате (plik = fopen(<input bmp>, "r+b");, тогда вам также необходимо открыть для записи в двоичном формате (f = fopen(<output bmp>, "w+b");), чтение и запись симметричны
Вы удерживаете в памяти только одну строку развертки, поэтому вам придется искать и записывать ее, прежде чем читать следующую строку. В противном случае вы напишете много копий последней строки.