Я прочитала файл bmp.
BITMAPFILEHEADER fh;
BITMAPINFOHEADER ih;
RGBQUAD rgbQ;
BITMAPINFO info;
void main(){
int nread;
int fd;
int bitsize; /* Size of bitmap */
int infosize; /* Size of header information */
fd = open("256_1.bmp", O_RDONLY);
nread = read(fd, (void*)&fh, sizeof(BITMAPFILEHEADER));
infosize = fh.bfOffBits - sizeof(BITMAPFILEHEADER);
BITMAPINFO info2;
nread = read(fd, (void*)&info2, infosize);
if ((bitsize = info2.bmiHeader.biSizeImage) == 0)
bitsize = (info2.bmiHeader.biWidth *
info2.bmiHeader.biBitCount + 7) / 8 *
abs(info2.bmiHeader.biHeight);
char bits[bitsize];
nread = read(fd, bits, bitsize);
for(int i = 0; i < 1; i++)
cout<<&(bits[i])<<endl;
int cl = close(fd);
}
при распечатывании массива bits[0] в консоли получается моя картинка, но какими-то символами.
Как можно понять, какой символ соответствует какому цвету и правильно ли я считала файл?
Буду очень благодарна, если кто-то сможет мне помочь
08.11.05 09:32: Перенесено модератором из 'C/C++. Прикладные вопросы' — Павел Кузнецов
Здравствуйте, gradik, Вы писали:
G>Я прочитала файл bmp.
G>G>BITMAPFILEHEADER fh;
G>BITMAPINFOHEADER ih;
G>RGBQUAD rgbQ;
G>BITMAPINFO info;
G>void main(){
G> int nread;
G> int fd;
G> int bitsize; /* Size of bitmap */
G> int infosize; /* Size of header information */
G> fd = open("256_1.bmp", O_RDONLY);
G> nread = read(fd, (void*)&fh, sizeof(BITMAPFILEHEADER));
G> infosize = fh.bfOffBits - sizeof(BITMAPFILEHEADER);
G> BITMAPINFO info2;
G> nread = read(fd, (void*)&info2, infosize);
G> if ((bitsize = info2.bmiHeader.biSizeImage) == 0)
G> bitsize = (info2.bmiHeader.biWidth *
G> info2.bmiHeader.biBitCount + 7) / 8 *
G> abs(info2.bmiHeader.biHeight);
G> char bits[bitsize];
G> nread = read(fd, bits, bitsize);
G> for(int i = 0; i < 1; i++)
G> cout<<&(bits[i])<<endl;
G> int cl = close(fd);
G>}
G>
G>при распечатывании массива bits[0] в консоли получается моя картинка, но какими-то символами.
G>Как можно понять, какой символ соответствует какому цвету и правильно ли я считала файл?
G>Буду очень благодарна, если кто-то сможет мне помочь
Я так понял тебе надо изобразить картинку в текстовом режиме?
Тогда вот
эта ссылка должна помочь.
Здравствуйте, korzhik, Вы писали:
K>Здравствуйте, gradik, Вы писали:
G>>при распечатывании массива bits[0] в консоли получается моя картинка, но какими-то символами.
G>>Как можно понять, какой символ соответствует какому цвету и правильно ли я считала файл?
G>>Буду очень благодарна, если кто-то сможет мне помочь
K>Я так понял тебе надо изобразить картинку в текстовом режиме?
K>Тогда вот эта ссылка должна помочь.
Спасибо за ссылку, но это не то, что мне нужно
Я как раз могу получить мою картинку в символах, но мне надо эти символы как-то преобразовать, чтобы я знала, какой символ какому цвету соответствует! Т.е. получить массив не символов, а массив цветов.
P.S. Спасибо модератору за перенос письма на другой форум
Здравствуйте, gradik, Вы писали:
skip
G>Я как раз могу получить мою картинку в символах, но мне надо эти символы как-то преобразовать, чтобы я знала, какой символ какому цвету соответствует! Т.е. получить массив не символов, а массив цветов.
Так это очень сильно от количества цветов в растре зависит

Если это 256-цветный растр, то у него есть палитра и каждый байт изображения есть индекс в этой самой палитре. Это простейший случай.
Если это 2-цветный растр, то каждый байт содержит 8 пикселов, которые в свою очередь являются индексами в палитре.
Если это 16-цветный растр, то каждый байт содержит по 2 пиксела, являющихся индексами в палитре.

Если растр полноцветный, то каждые 3 байта соответствуют 1-му пикселу в формате BGR (заметь, не RGB, а именно BGR). Никакой палитры здесь нет.
Для растра с альфа-каналом используются уже по четыре байта на пискел — три байта задают BGR и 1 — прозрачность.
Для экзотических форматов (15 и 16-битных) все немного сложнее — там идет упаковка.
Да, упаковка в RLE может применяться и для 16 и 256-цветных растров тоже.
Для первых трех случаев палитра присутствует в самом растре — см. структуру
BITMAPINFO.
Вообще, формат bmp-файла (точнее DIB-файла) очень подробно описан в MSDN. См.
BITMAPINFOHEADER
Здравствуйте, Андрей, Вы писали:
skip
Сорри, немного прогнал насчет 15-битных bmp — таковых в природе не существует
И кроме того, для всех непалитровых форматов (более 256 цветов, исключая 24-х битовый) может применяться "упаковка" (см. BI_BITFIELDS) — хотя я в своей практике таковых не встречал