2013-05-28 2 views
0

Я полный новичок в этом. Я попытаюсь объяснить себя настолько, насколько смогу.Чтение .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 в 2D-массив, а затем сделать некоторые манипуляции с этим массивом. Затем я хотел бы создать новый файл с управляемым изображением.

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

+0

код [здесь] (http://bitmap.codeplex.com/) – neagoegab

+0

Я бы рекомендовал использовать OpenCV, для чтения изображения с ним потребуется две строки кода. – Mikhail

+0

Ty mate, но я бы хотел сделать это без каких-либо библиотек, если это возможно. – SpiderRico

ответ

0

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

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

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

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

Если вы по-прежнему хотите самостоятельно прочитать BMP, прочитайте статьи msdn aboud bmp или google для учебников «читать bmp-файл».

0

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

+0

Да, но все дело в том, чтобы делать это с чистым C++ :) – SpiderRico

+0

Предлагаемый lib находится в чистом C++ (несколько заголовков и тела), поэтому вы можете заглянуть в него и получить интересную часть кода от него; p – Givi

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