ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX


         

нужно ли создавать цветовую таблицу


// цветовой кодировки пикселей

iBitCount = ds.ddpfPixel Format.dwRGBBitCount;

if ((iBitCount != 16) && (iBitCount != 24)) ( return NULL; // He поддерживается программой

}

}

ASSERT(ds.dwFlags & DDSD_WIDTH);

int iWidth = ds.dwWidth;

ASSERT(ds.dwFlags & DDSD_HEIGHT) ;

int iHeight = ds.dwHeight;

// Проверить, нужно ли создавать цветовую таблицу int iCIrTabEntries = 0;

if (ds.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8

// Построить цветовую таблицу iCIrTabEntries = 256;

iBitCount = 8;

// Создать структуру BITMAPINFO, описывающую растр int iSize = sizeof(BITMAPINFO) + iCIrTabEntries * sizeof(RGBQUAD) ;

BITMAPINFO* pBMI = (BITMAPINFO*) new BYTE[iSize];

memsetfpBMI, 0, iSize);

pBMI-»bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

pBMI-»bmiHeader.biWidth = iWidth;

pBMI-»bmiHeader.biHeight = iHeight;

pBMI-»bmiHeader. biPlanes = 1;

pBMI-»bmiHeader.biBitCount = iBitCount;

pBMI-»bmiHeader.biClrUsed = iCIrTabEntries;

HOC hdcScreen = ::GetDC(NULL) ;

// Создать цветовую таблицу, если необходимо if (iCIrTabEntries » 0) (

ASSERT(iClrTabEntries«= 256);

PALETTEENTRY ре[256];

Покадровая съемка ''illi' 257

ASSERT(m_pPalette) ;

m_pPalette-»GetInterface () -»GetEntries (0, 0,

iCIrTabEntries, pe) ;

for (int i = 0; i « iCIrTabEntries; i++) ( pBMI-»bmiColors [i] .rgbRed = pe[i].peRed;

pBMI-»bmiColors [i] .rgbGreen = pe[i].peGreen;

pBMI-»bmiColors [i] .rgbBlue = pe[i].peBlue;

} >

// Создать DIB-секцию, размер которой

// совпадает с размером вторичного буфера

BYTE* pBits = NULL;

HBITMAP hBmp = ::CreateDIBSection(hdcScreen, pBMI,

DIB_RGB_COLORS, (VOID**)&pBits, NULL, 0);

::ReleaseDC(NULL, hdcScreen);

if (!hBmp) { delete pBMI;

return NULL;

}

ASSERT(pBits) ;

// Скопировать графические данные на поверхность DIB

int iDIBScan =

( ( (pBMI-»bmiHeader.biWidth

* pBMI-»bmiHeader.biBitCount) + 31) & -31) »» 3;

int iSurfScan = ds.lPitch;

BYTE* pDIBLine = pBits + (iHeight - 1) * iDIBScan;

BYTE* pSurfLine = (BYTE*)ds.IpSurface;


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