С помощью файлового формата AVI и VFW API можно получить палитру, оптимально подходящую для просмотра видеоролика. Функция InstallPalette() извлекает необходимые данные и использует их для конструирования палитры DirectDraw. Функция InstallPalette() выглядит так: Функция ICDecompressGetPalette() получает данные палитры и в цикле преобразует их в формат, который мы можем использовать. Полученный массив передается при вызове функции CreatePalette() интерфейса 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;
}