Краткое описание по работе с Direct Draw

             

Программирование DirectDraw - часть 4


/p>

Таким образом, мы имеем возможность загрузить все необходимые изображени я в видео поверхности DirectDraw. Для создания динамического изображения остается только организовать их копирование в на поверхности видеоизображения (первичный или вторичный буфер).

5. Загрузка палитры

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

Пример кода создания палитры в DirectDraw

 

 

 

 

 

/*

 * Создание палитры DirectDraw для файла загружаемого с диска

 *  параметр szBitmap имя файла

 */

IDirectDrawPalette * LoadPaletteFromDibFile(IDirectDraw *pdd, LPCSTR

szBitmap)

{

    IDirectDrawPalette* ddpal;

    int i;

    int n;

    int fh;

    PALETTEENTRY ape[256];

    if (szBitmap && (fh = _lopen(szBitmap, OF_READ)) != -1)

    {

        BITMAPFILEHEADER bf;

        BITMAPINFOHEADER bi;

        _lread(fh, &bf, sizeof(bf));

        _lread(fh, &bi, sizeof(bi));

        _lread(fh, ape, sizeof(ape));

        _lclose(fh);

        if (bi.biSize != sizeof(BITMAPINFOHEADER))

            n = 0;

        else if (bi.biBitCount > 8)

            n = 0;

        else if (bi.biClrUsed == 0)

            n = 1 << bi.biBitCount;

        else

            n = bi.biClrUsed;

      //

      // цветовая таблица DIB имеет  BGR кодировку а не RGB

      // сделаем необходимую транспозицию.

      //

        for(i=0; i<N; (pdd- if } ape[i].peBlue = r; ape[i].peRed = ape[i].peBlue; r = ape[i].peRed; BYTE { ) i++CreatePalette(DDPCAPS_8BIT, ape, &ddpal, NULL) != DD_OK)

    {

        return NULL;

    } else {

        return ddpal;

    }

}

<


Содержание  Назад  Вперед