2016-03-14 6 views
0

Я пытаюсь открыть файл растрового изображения, отредактировать его, а затем сохранить отредактированную версию в виде нового файла. В конечном итоге это связано с использованием стеганографии. Я пытаюсь сохранить информацию растрового изображения сейчас, но сохраненный файл не открывается. Нет ошибок в компиляции или времени выполнения. Он отлично работает, а остальные функции работают.C++ bitmap edit

void cBitmap::SaveBitmap(char * filename) 
{ 
    // attempt to open the file specified 
    ofstream fout; 

    // attempt to open the file using binary access 
    fout.open(filename, ios::binary); 

    unsigned int number_of_bytes(m_info.biWidth * m_info.biHeight * 4); 
    BYTE red(0), green(0), blue(0); 

    if (fout.is_open()) 
    { 
     // same as before, only outputting now 
     fout.write((char *)(&m_header), sizeof(BITMAPFILEHEADER)); 
     fout.write((char *)(&m_info), sizeof(BITMAPINFOHEADER)); 

     // read off the color data in the bass ackwards MS way 
     for (unsigned int index(0); index < number_of_bytes; index += 4) 
     { 
      red = m_rgba_data[index]; 
      green = m_rgba_data[index + 1]; 
      blue = m_rgba_data[index + 2]; 

      fout.write((const char *)(&blue), sizeof(blue)); 
      fout.write((const char *)(&green), sizeof(green)); 
      fout.write((const char *)(&red), sizeof(red)); 
     } 


    } 
    else 
    { 
     // post file not found message 
     cout <<filename << " not found"; 
    } 
    // close the file 
    fout.close(); 
} 
+0

Я предлагаю получить шестнадцатеричный редактор и посмотреть на различия между исходным файлом и сохраненной программой. (Не смотрите на фактические данные пикселов, но смотрите на заголовки, размер файла и т. Д.) – immibis

+0

http://ideone.com/uHe35B – Brandon

+0

Я сделал это, заголовок одинаковый для обоих. Спасибо, но –

ответ

0

Вам не хватает байтов заполнения после каждой строки RGB. Строки должны быть кратны 4 байтам каждый.

Кроме того, предполагается ли, что вы пишете файл с 24 или 32 бит BMP? Если вы пишете 24-битный, вы просто пропускаете прокладку. Если вы пишете 32-битный, то вам не хватает каждого дополнительного байта (альфа). Недостаточно информации, чтобы исправить ваш пример кода, не написав полную запись в формате bmp, которая поддерживала бы все возможные варианты.

+0

Это не остановит файл от открытия. Это просто заставило бы его выглядеть странно. Его заголовки ошибочны. – Brandon

+0

Нет, файл будет коротким, и любая достойная программа даст ошибку чтения. –

+0

Я пытаюсь с 24-битными файлами BMP. Можете ли вы объяснить заполнение немного больше? Благодарю за ваш ответ! –

 Смежные вопросы

  • Нет связанных вопросов^_^