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



Клипы - часть 7


// Сдвигать вниз до тех пор, пока младший байт источника //не совпадет с младшим байтом приемника. // Сдвигать снова, пока не будет достигнута точность // в 5 бит. DWORD dwRShift = O.DWORD dwGShift = 0;

DWORD dwBShift = O.DWORD dwNotMask;

if ((ds.ddpfPixelFormat.dwFlags & DDPF RGB) &&

(iBitCount »= 16)) {

if (iBitCount == 16) { dwNotMask = OxFFFFFFEO;

/b> Глава 11. Клипы

} else {

dwNotMask = OxFFFFFFOO;

} DWORD dwMask = ds.ddpfPixelFormat.dwRBitMask;

ASSERT(dwMask) ;

while ((dwMask & 0х01) == 0) {

dwRShift++;

dwMask = dwMask »» 1;

} while ((dwMask & dwNotMask) != 0) {

dwRShift++;

dwMask = dwMask »» 1;

} dwMask = ds.ddpfPixelFormat.dwGBitMask;

ASSERT(dwMask) ;

while ((dwMask & 0х01) == 0) (

dwGShift++;

dwMask = dwMask »» 1;

) while ((dwMask & dwNotMask) != 0) {

dwGShift++;

dwMask = dwMask »» 1;

}

dwMask = ds.ddpfPixelFormat.dwBBitMask;

ASSERT(dwMask) ;

while ((dwMask & 0х01) == 0) {

dwBShift++;

dwMask = dwMask »» 1;

) while ((dwMask & dwNotMask) != 0) {

dwBShift++;

dwMask = dwMask »» 1;

} i

// Снова заблокировать поверхность // для получения графических данных m_hr = iS-»Lock(NULL,

Sds,

DDLOCK_SURFACEMEMORYPTR I DDLOCK_WAIT,

NULL) ;

ASSERT(m_hr == DD_OK) ;

for (int у = 0; у « iHeight; y++) { switch (iBitCount) { case 8: {

BYTE* pDIBPix = pDIBLine;

BYTE* pSurfPix = pSurfLine;

for (int x = 0; x « iWidth; x++) {*pDIBPix++ =

Покадровая съемка 'Ч^Щ 259

// *pSurfPix++;

} } break;

case 16: (

WORD* pDIBPix = (WORD*)pDIBLine;

WORD* pSurfPix = (WORD*)pSurfLine;

WORD r, g, b;

// (int x = 0; x « iWidth; x++) ( r = (*pSurfPix & (WORD)

ds.ddpfPixel Format.dwRBitMask) »» dwRShift;

g = (*pSurfPix & (WORD)

ds.ddpfPixelFormat.dwGBitMask) »» dwGShift;

b = (*pSurfPix & (WORD)

ds.ddpfPixeiFormat.dwBBitMask) »» dwBShift;

*pDIBPix++ = ((r & OxIF) «« 10) ¦ ( (g & OxIF) «« 5) I (b S OxIF) ;

p3urfPix++;

} } break;

case 24: {

BYTE* pDIBPix = pDIBLine;

BYTE* pSurfPix = pSurfLine;




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