2015-10-06 3 views
3

Есть ли способ найти высоту и ширину из файла * .bmp либо через его заголовочный файл, либо другим способом? В настоящее время я использую Visual Studio 2010. Я понимаю, что файл заголовка составляет 54 байта.Высота и ширина изображения с использованием C++

настоящее время у меня это:

ifstream image; 
image.open("image.bmp",std::ios_base::binary); 

if (image.is_open()) 
{ 
cout<< "function success\n"; 
} 
else 
{ 
cout<< "unable to open file"; 
} 
//get length of file: 
image.seekg(0, image.end); 
int n = image.tellg(); 
image.seekg (0, image.beg); 

//allocate memory: 
char* res = new char[n]; 

//read data as a block: 
image.read(res, n); 

Есть ли способ, что я могу перебрать, чтобы извлечь соответствующую информацию? Я был бы признателен за пример, если это возможно.

Заранее спасибо.

+3

Я рекомендую использовать библиотеку для этого. GOOGLE дал мне это: http://easybmp.sourceforge.net/ – Galik

ответ

4

В файле BMP есть BITMAPFILEHEADER, за которым следует сразу BITMAPINFOHEADER или BITMAPCOREINFO.

Последние два содержат высоту/ширину растрового изображения.

Если вы хотите сделать это в Windows, я бы использовал определения этих структур из windows.h. Если вы делаете это в Linux или в другом месте, вы можете использовать определения из MSDN (и обязательно установите компилятор, чтобы убедиться, что между полями структур не существует упаковки).

С этим вы можете прочитать в структурах и зачитать интересующие вас фрагменты. Я полагаю, вы могли бы искать правильные смещения, а затем читать правильное количество байт оттуда, но я бы прочитал все структуры вместо этого. Это просто и в любом случае вы собираетесь читать один сектор диска, так что вряд ли вы получите скорость или что-то в этом роде.

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