Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Открытие bmp файла

14K
25 февраля 2007 года
demonoide
30 / / 11.02.2007
Использую Borland C++ 3.1. Начал писать курсовик и понял, что вырисовывать вручную графику - сущий ад.

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

Заранее благодарю.
2.7K
25 февраля 2007 года
alexeyvnikitin
96 / / 11.10.2004
Вот загрузка BMP файла

Код:
bool loadBMP( char *fn ) {
  FILE *f;

  fopen_s(&f, fn, "rb");
  if (!f)
    return false;

  BITMAPINFOHEADER bmih;
  fseek(f, sizeof(BITMAPFILEHEADER), SEEK_SET);
  fread(&bmih, 1, sizeof(bmih), f);

  _width = bmih.biWidth;
  _height = bmih.biHeight;
  _bands = bmih.biBitCount / 8;
  int scanlength = ((_width * _bands + 3) / 4) * 4;

  UCHAR *buf;
  if ((buf = (UCHAR *)malloc(scanlength * _height)) == NULL)
    return false;
  if (data) free(data);
  data = (UCHAR*)malloc(_width * _height * _bands);

  fseek(f, sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (_bands == 1 ? 256 * 4 : 0), SEEK_SET);
  fread(buf, 1, scanlength * _height, f);
  fclose(f);

  for (int y = 0; y < _height; y++)
    for (int x = 0; x < _width; x++)
      for (int k = 0; k < _bands; k++) {
        data[(y * _width + x) * _bands + k] =
            buf[(_height - y - 1) * scanlength + x * _bands + _bands - k - 1];
      }
  free(buf);
  return true;
}


код не претендует на полноту. Будут вопросы, спрашивай

PS для работы с BC3.1 надо немного модифицировать
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог