writeablebitmap — редактирование растрового изображения на C ++

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

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

Решение

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

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

0

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

Других решений пока нет …

По вопросам рекламы [email protected]