2012-03-14 2 views
1

как я могу поставить file.bmp в массив с помощью стандартных Lib C++ или с Whithout windows.h ЭСТКак поместить BMP файл в массив C++ C

редактировать Я хочу получить BMP цвета массива изменить массив и поместить в BMP, используя стандартный Lib

+4

'file = fopen (" file.bmp "," rb "); fread (buffer, 1, filesize, file); ' –

+1

Можете ли вы прояснить, что вы пытаетесь сделать. Вы хотите, чтобы фактические байты данных файла в формате BMP в массиве? Или вам нужны данные изображения в массиве в каком-то другом формате? –

+0

Это домашнее задание? По цветам вы имеете в виду значения пикселей? –

ответ

5

использовать двоичный поток:

#include <fstream> 

char buffer[100]; 
ifstream myFile ("myImage.bmp", ios::in | ios::binary); 
myFile.read (buffer, 100); 

myFile.close(); 

Однако разбор это будет немного сложнее, если вы настаиваете на том, что путь. Я предлагаю вам заглянуть в общую библиотеку изображений C++, такую ​​как boost GIL (не поддерживает bmp) или this open source bmp library.

Если вы не можете использовать какие-либо сторонние или специфичные для ОС библиотеки, вам придется самостоятельно анализировать данные. Стандартные библиотеки C++ не содержат ничего для вас. Вам нужно будет начать с ознакомления с структурой BMP. У Wikipedia's article есть хорошее описание.

+0

'fstream.h' скорее всего потерпит неудачу (т. Е .: я не знаю какой-либо системы, где существует' fstream.h'). Вы имели в виду 'fstream'. – netcoder

+0

@netcoder Я сделал, спасибо. Исправлена. – rob05c

0
File f = new File(fileName); 
//get the file length 
//create a buffer big enough. 
file.read(buffer, size)... 

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

Теперь, если это домашняя работа (и я уверен, что это так), то вы можете создать новую структуру, которая имеет раздел заголовка и раздел «карта». Вы могли бы рассказать, насколько велик заголовок (i верьте, что в заголовке есть переменная, которая сообщает вам, насколько она велика.) С учетом этого вы можете легко захватить только данные карты.

Я бы попробовал его с помощью объекта CBitmap, а затем выкопал код для CBitmap и вытащил нужные вам биты.

жаль, что вы не предлагаете код. В наши дни я не в мире C/C++, так что это не так свежо, как когда-то было.


ознакомьтесь с документами на bitblt .. Это поможет вам изменить свой массив. Также быстрый поиск по Google, и вы могли бы найти большую часть этого. http://www.vbforums.com/showthread.php?t=261522 был первым хитом, который я получил на растровом изображении How to change, modify, cut and swap pixels from BITMAP был немного по странице, но все же .. google first, SO last.

+0

Некоторые подскажут, как использовать lib. Boost/mfc .. они тяжелые и раздувают ваше приложение. Не то, чтобы они не были фантастическими, но убедитесь, что они вам нужны. – baash05

+0

Вы не можете сказать 'File f = new File (fileName);' в C++, если вы не используете какую-либо библиотеку. C определяет FILE, но вы, конечно же, не можете его использовать. – rob05c

+0

Правильно, boost = bloat. Но если это или разбор ваших собственных растровых изображений ... Но у boost нет библиотеки растровых изображений, о которой я знаю. Он не сказал windows.h; это означает отсутствие MFC. Библиотека EasyBmp, с которой я связан, выглядит довольно маленькой. – rob05c