Чтение .bmp (24 бит) в 2D массив

Я абсолютный новичок в этом. Я постараюсь объяснить себя как можно больше.

int i, j;
string filename;
cout << "Please enter the file name: " << endl;
cin >> filename;
fstream stream;

stream.open(filename.c_str(),
ios::in|ios::out|ios::binary);

int file_size = get_int(stream, 2);
int start = get_int(stream, 10);
int width = get_int(stream, 18);
int height = get_int(stream, 22);

Эта часть должна получить файл и его значения.

for ( i = 0; i < height; i++ )
{
for ( j = 0; j < width; j++)
{
for (int k = 0; k < split*split; k++){

int pos = stream.tellg();
int blue = stream.get();
int green = stream.get();
int red = stream.get();

И это достигает внутри каждого пикселя и получает значения RBG.

Я хочу сначала сохранить значения RBG в двумерном массиве, а затем выполнить некоторые манипуляции с этим массивом. Затем я хотел бы создать новый файл с измененным изображением.

Я понятия не имею, поэтому некоторые инструкции вместе с кодом будут очень полезны.

0

Решение

Формат файла BMP задокументирован во многих местах. Например, в википедии.

Самый простой способ — реализовать структуру, описывающую заголовок bmp, прочитать всю структуру за один раз, а затем прочитать отдельные пиксели.

Ваша функция чтения не работает и не работает, потому что вы не читали подпись файла — поле «BM» заголовка.

На некоторых операционных системах все уже есть строчки и функции для чтения BMP. На окнах есть BITMAPFILEHEADER. Использование этих структур означает, что вы не используете «чистый C ++».

Если вы все еще хотите прочитать BMP самостоятельно, прочитайте статьи MSDN aboud bmp или google для учебников «read bmp file».

0

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

Эта библиотека очень проста в использовании http://easybmp.sourceforge.net/. Вы можете легко проверить значения RGB после загрузки файла.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector