Функция InstallPalette()
С помощью файлового формата AVI и VFW API можно получить палитру, оптимально подходящую для просмотра видеоролика. Функция InstallPalette() извлекает необходимые данные и использует их для конструирования палитры DirectDraw. Функция InstallPalette() выглядит так:
BOOL AviPlayWin::InstallPalette() { ICDecompressGetPalette( decomp, srcfmt, dstfmt ); PALETTEENTRY pe[256]; LPBITMAPINFO info=(LPBITMAPINFO)dstfmt; for (int i=0; i<256; i++) { pe[i].peRed = info->bmiColors[i].rgbRed; pe[i].peGreen = info->bmiColors[i].rgbGreen; pe[i].peBlue = info->bmiColors[i].rgbBlue; pe[i].peFlags = 0; } if (avipal) avipal->Release(); ddraw2->CreatePalette( DDPCAPS_8BIT, pe, &avipal, 0 ); primsurf->SetPalette( avipal ); return TRUE; } |
Функция ICDecompressGetPalette() получает данные палитры и в цикле преобразует их в формат, который мы можем использовать. Полученный массив передается при вызове функции CreatePalette() интерфейса DirectDraw. Остается лишь присоединить созданную палитру к первичной поверхности.