在DXSDK的例子中有段关于颜色键的代码不是很明白
DWORD DDColorMatch( LPDIRECTDRAWSURFACE7 pdds, COLORREF dwGDIColor )
{
if( pdds == NULL )
return 0x00000000; COLORREF rgbT;
HDC hdc;
DWORD dw = CLR_INVALID;
DDSURFACEDESC2 ddsd;
HRESULT hr; // Use GDI SetPixel to color match for us
if( dwGDIColor != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK)
{
rgbT = GetPixel(hdc, 0, 0); // Save current pixel value
SetPixel(hdc, 0, 0, dwGDIColor); // Set our value
pdds->ReleaseDC(hdc);
} // Now lock the surface so we can read back the converted color
ddsd.dwSize = sizeof(ddsd);
hr = pdds->Lock( NULL, &ddsd, DDLOCK_WAIT, NULL );
if( hr == DD_OK)
{
dw = *(DWORD *) ddsd.lpSurface;
if( ddsd.ddpfPixelFormat.dwRGBBitCount < 32 ) // Mask it to bpp
dw &= ( 1 << ddsd.ddpfPixelFormat.dwRGBBitCount ) - 1;
pdds->Unlock(NULL);
} // Now put the color that was there back.
if( dwGDIColor != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK )
{
SetPixel( hdc, 0, 0, rgbT );
pdds->ReleaseDC(hdc);
}
return dw;
}在
SetPixel(hdc, 0, 0, dwGDIColor);
处设置了颜色索引值,然后在
dw = *(DWORD *) ddsd.lpSurface;
dw和dwGDIColor为什么不一样?
是怎么转变的?颜色键不是设置成自己图片的底色吗?
为什么我见有的例子中把COLORREF设置成CLR_INVALID,然后图片底色随便都可以
DWORD DDColorMatch( LPDIRECTDRAWSURFACE7 pdds, COLORREF dwGDIColor )
{
if( pdds == NULL )
return 0x00000000; COLORREF rgbT;
HDC hdc;
DWORD dw = CLR_INVALID;
DDSURFACEDESC2 ddsd;
HRESULT hr; // Use GDI SetPixel to color match for us
if( dwGDIColor != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK)
{
rgbT = GetPixel(hdc, 0, 0); // Save current pixel value
SetPixel(hdc, 0, 0, dwGDIColor); // Set our value
pdds->ReleaseDC(hdc);
} // Now lock the surface so we can read back the converted color
ddsd.dwSize = sizeof(ddsd);
hr = pdds->Lock( NULL, &ddsd, DDLOCK_WAIT, NULL );
if( hr == DD_OK)
{
dw = *(DWORD *) ddsd.lpSurface;
if( ddsd.ddpfPixelFormat.dwRGBBitCount < 32 ) // Mask it to bpp
dw &= ( 1 << ddsd.ddpfPixelFormat.dwRGBBitCount ) - 1;
pdds->Unlock(NULL);
} // Now put the color that was there back.
if( dwGDIColor != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK )
{
SetPixel( hdc, 0, 0, rgbT );
pdds->ReleaseDC(hdc);
}
return dw;
}在
SetPixel(hdc, 0, 0, dwGDIColor);
处设置了颜色索引值,然后在
dw = *(DWORD *) ddsd.lpSurface;
dw和dwGDIColor为什么不一样?
是怎么转变的?颜色键不是设置成自己图片的底色吗?
为什么我见有的例子中把COLORREF设置成CLR_INVALID,然后图片底色随便都可以
和我一样?〉