Главная страница
Навигация по странице:

  • ifndef

  • endif

  • Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика


    Скачать 0.66 Mb.
    НазваниеРуководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
    Дата21.10.2022
    Размер0.66 Mb.
    Формат файлаdocx
    Имя файла221937-83556.docx
    ТипРуководство
    #747097
    страница25 из 30
    1   ...   22   23   24   25   26   27   28   29   30
    char** argv)

    {

    glutlnit (&argc , argv);

    glutlnitDisplayMode ( GLUT_SINGLE | GLUT_RGB | GLUT_DEFTH);

    glutlnitWindowSize (500, 500); glutCreateWindow (argv[0]); init ();

    glutReshapeFunc (reshape); glutDisplayFunc( display ) ; glutKeyboardFunc (keyboard); glutMainLoop () ; return 0;

    }



    Рис. Б.2. Результат работы программы Б.2.

    Б.З. Загрузка BMP файла

    В этом пункте приводится исходный текст функции LoadBMP(), которая позволяет загружать файлы полноцветных изображе­ний (24 бита на точку) в формате Windows Bitmap (BMP).

    Синтаксис вызова функции:

    Б. 3. Загрузка BMP файла

    179

    int LoadBMP(const char* filename , IMAGE* out_img)

    Параметр filename определяет имя файла. Результат выполне­ния функции записывается в структуру out_img, которая опре­делена следующим образом:

    typedef struct _MAGE

    { _

    int width;

    int height;

    unsigned char* data; } IMAGE;

    Поля width и height хранят, соответственно, высоту и ширину изображения. В поле data построчно хранится само изображение, в виде последовательности RGB-компонент цветов пикселей.

    Программа Б.З. Загрузка BMP. Файл loadbmp.h.

    #ifndef JjOADBMP_H #define JjOADBMP_H

    typedef struct _MAGE

    { _

    int width;

    int height;

    unsigned char* data;

    } IMAGE;

    int LoadBMP(const char* file , IMAGE* out_img);

    #endif

    Программа Б.4. Загрузка BMP. Файл loadbmp.cpp. ^include "loadbmp.h"

    ^include

    180 Приложение Б. Демонстрационные программы

    ^include T^include . h>

    // размер заголовка
    BMP—файла

    #define BMP_SIZE_FILEHEADER 14

    // размер информационного заголовка BMP—файла

    #define BMP_SIZEJNFOHEADER 40

    #define BMP_COLOR_BITS_24 24

    // вспомогательные функции

    static unsigned int uIntl6Number (unsigned char buf[2])

    {

    return (buf[l] « 8) | buf[0];

    }

    static unsigned int uInt32Number (unsigned char buf[4])

    {

    unsigned numb = buf[3]; numb = (numb « 8) | buf[2]; numb = (numb « 8) | buf[l]; numb = (numb « 8) | buf[0]; return numb;

    }

    int ReadFileHeader (FILE* f, int* bitmap_pos)

    {

    unsigned char header [BMP_SIZE_FRJEHEADER] ;

    s i z e _ t numb = 0;

    int offset = 0;

    if (fseek(f, 0, SEEK_SET)) return 0;

    numb = fread (header , BMP_SIZE_FILEHEADER, 1, f);

    Б. 3. Загрузка BMP файла

    181

    if (numb ! = 1) return 0;

    if (header[0] != 'B' || header[l] != 'M') return 0;

    offset = uInt32Number (header + 10);

    numb = fread(header, 4, 1, f); if (numb ! = 1) return 0;

    if (uInt32Number(header) != 40) return 0;

    *bitmap_pos = offset ; return 1;

    }

    // загрузка BMP—файла

    int LoadBMP(const char* file , IMAGE* out_img)

    {

    FILE* f;

    int bitmap_pos;

    unsigned char buf[40];

    s i z e _ t numb ;

    int x_res ;

    int y_res ;

    int n_bits ;

    int compression ;

    int size_image ;

    int n_used_colors ;

    // открываем файл

    f = fopen(file , "rb");

    182 Приложение Б. Демонстрационные программы

    if (!f) return 0;

    if (out_img = NULL) return 0;

    // читаем заголовок

    if (! ReadFileHeader (f , &bitmap_pos))

    {

    fclose(f ); return 0;

    }

    if (fseek(f, BMP_SIZE_FILEHEADER, SEEK_SET))

    {

    fclose(f ); return 0;

    }

    numb = fread(buf, 40, 1, f); if (numb ! = 1)

    {

    fclose(f ); return 0;

    }

    x_res = (int )uInt32Number (buf + 4); y_res = (int )uInt32Number (buf + 8);

    n_bits = (int) uIntl6Number ( buf + 14)

    compression = (int) uInt32Number ( buf + 16)

    size_image = (
    1   ...   22   23   24   25   26   27   28   29   30


    написать администратору сайта