//创建调色板
LPDIRECTDRAWPALETTE lpDDPal = NULL;;
PALETTEENTRY* pPalette = (PALETTEENTRY*)g_PaletteColor;
if(FAILED(m_lpDD->CreatePalette(DDPCAPS_8BIT | DDPCAPS_INITIALIZE,
pPalette, &lpDDPal, NULL)))
{
return FALSE;
}
//设置关联
if(m_lpPrmy != NULL)
{
if(FAILED(hResult = m_lpPrmy ->SetPalette(lpDDPal)))
{
MessageBox(GetDirectDrawError(hResult), _T("错误"), MB_OK); if(lpDDPal != NULL)
{
lpDDPal->Release();
lpDDPal = NULL;
}
return FALSE;
}
}g_PaletteColor是一个颜色数组,256个元素,是这样定义的
#define RGB32(r, g, b) (PC_NOCOLLAPSE << 24 | b << 16 | g << 8 | r)COLORREF g_PaletteColor[256] =
{
RGB32(0, 0, 0), RGB32(128, 0, 0), ...
};
PALETTEENTRY* pPalette = (PALETTEENTRY*)g_PaletteColor;这样强制转换之后格式确实是对的,不明白哪里出错了
memset(&ddpf, 0, sizeof(DDPIXELFORMAT));
ddpf.dwSize = sizeof(DDPIXELFORMAT);
ddpf.dwFlags = 8;
ddpf.dwRGBBitCount = 8;
//创建前端缓冲区
ZeroMemory(&ddsd, sizeof(ddsd));
//填写DDSURFACEDESC2结构
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY;
ddsd.ddpfPixelFormat = ddpf;
if(FAILED(hResult = m_lpDD->CreateSurface(&ddsd, &m_lpPrmy, NULL)))
{
MessageBox(GetDirectDrawError(hResult));
return FALSE;
}
//设置调色板
if(m_lpPrmy != NULL)
{
if(m_lpPrmy->IsLost())
{
m_lpPrmy->Restore();
}
if(FAILED(hResult = m_lpPrmy->SetPalette(lpDDPal)))
{
MessageBox(GetDirectDrawError(hResult));
if(lpDDPal != NULL)
{
lpDDPal->Release();
lpDDPal = NULL;
}
return FALSE;
}
}
if(lpDDPal != NULL)
{
lpDDPal->Release();
lpDDPal = NULL;
}