Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение bmp файла 
:(
    Опции темы
Гость_mln
Дата 7.11.2005, 18:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я прочитала файл 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] в консоли получается моя картинка, но какими-то символами.
Как можно понять, какой символ соответствует какому цвету и правильно ли я считала файл?
Буду очень благодарна, если кто-то сможет мне помочь
  Вверх
Darhazer
Дата 7.11.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: нет
Всего: 29



Привет
Во первих, цвет сохраняеться в 3 char-а (если он 24 битовий)
Так что надо bits[i*3]... я вообще делаю cast к unsigned shor* ;)


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Guest
Дата 7.11.2005, 18:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет! Спасибо за ответ.
Если я читаю bits[] от других индексов, то всё равно получаю туже картинку. Поэтому я читаю только один нулевой bits[], и i*3 ничего не изменит.
И зачем нужен cast unsigned short?
А как можно получить из массива цветовую карту?
  Вверх
cardinal
Дата 7.11.2005, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99





--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Гость_mln
Дата 7.11.2005, 19:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Матрицу я получила, но каждый ее элемент это какие-то непонятные символы-буковки. Если их распечатать как int, то получаем числа, которые мне ничего не говорят о цвете. А как получить более конкретные и понятные представления этой матрицы цветов?
  Вверх
cardinal
Дата 7.11.2005, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



А что тебе говорит RGB? Это красный, зеленый и синие каналы цвета, которые его и характеризуют. Если ты праильно получила (в 24bit bmp) эти три значения, то это уже хорошо. Если у тебя другая bmp (не 24bit), то если мне память не изменяет, то число, которое ты получаешь это не цвет, а номер цвета в палитре. Палитра находится в начале файла и в ней сидят цвета, помоему как раз RGB.
Короче инфу то почитай по формату файлов bmp, а потом уже думай, что означают эти числа. А о буковках забудь, т.к. они не дают тебе никакой информации вообще (в том смысле, что только (удобней всего hex) значения тебе надо анализировать).


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0654 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.