经过如下代码后,或者显卡支持的pixelformat类型。
DDPIXELFORMAT ddpf;
ddpf.dwSize = sizeof( ddpf );
if ( FAILED( lpDDSPrimary_CG_DaHeng->GetPixelFormat( &ddpf ) ) )
{
return Fail( "Couldn't get pixel format.\n" );
}
获知:
ddpf.flags == 0x00000040; //DDPF_RGB 也是0x00000040
ddpf.dwRGBBitCount == 32; 但是,在执行如下代码时,失败了,
DDSURFACEDESC ddsd;
IDirectDrawSurface *pdds;
//
// create a DirectDrawSurface for this bitmap
//
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN ;
ddsd.dwWidth = wid;
ddsd.dwHeight = hei; ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB ;
ddsd.ddpfPixelFormat.dwRGBBitCount = 32;
HRESULT hr = pdd->CreateSurface(&ddsd, &pdds, NULL);
if ( hr != DD_OK)
{
const TCHAR *pSz = DXGetErrorDescription9(hr); return NULL;
}这是为啥, 求指点。
DDPIXELFORMAT ddpf;
ddpf.dwSize = sizeof( ddpf );
if ( FAILED( lpDDSPrimary_CG_DaHeng->GetPixelFormat( &ddpf ) ) )
{
return Fail( "Couldn't get pixel format.\n" );
}
获知:
ddpf.flags == 0x00000040; //DDPF_RGB 也是0x00000040
ddpf.dwRGBBitCount == 32; 但是,在执行如下代码时,失败了,
DDSURFACEDESC ddsd;
IDirectDrawSurface *pdds;
//
// create a DirectDrawSurface for this bitmap
//
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN ;
ddsd.dwWidth = wid;
ddsd.dwHeight = hei; ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB ;
ddsd.ddpfPixelFormat.dwRGBBitCount = 32;
HRESULT hr = pdd->CreateSurface(&ddsd, &pdds, NULL);
if ( hr != DD_OK)
{
const TCHAR *pSz = DXGetErrorDescription9(hr); return NULL;
}这是为啥, 求指点。
DDSURFACEDESC ddsd;
IDirectDrawSurface *pdds;
//
// create a DirectDrawSurface for this bitmap
//
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN ;
ddsd.dwWidth = wid;
ddsd.dwHeight = hei;
HRESULT hr = pdd->CreateSurface(&ddsd, &pdds, NULL);
if ( hr != DD_OK)
{
const TCHAR *pSz = DXGetErrorDescription9(hr);
return NULL;
}
可是,我要显示RGB格式的图像,不指定这些的话, 彩色图显示的是黑白的,而且,lPitch的值是我像素宽度的4倍, 我是这么放到RAM中的
WORD nStep = 3;//(nBits/8);
DWORD dLen = ddsd.dwWidth* ddsd.dwHeight * nStep;
BYTE* pDst = (BYTE*)ddsd.lpSurface;
BYTE* pSrc = p_src/* + dLen*/; for (int i = 0; i < ddsd.dwHeight; ++i){
CopyMemory(pDst + i * ddsd.lPitch, pSrc + i * ddsd.dwWidth * nStep, ddsd.dwWidth * nStep);
}
按照你说的修改,没有问题。 如下是代码。
DDSURFACEDESC ddsd;
IDirectDrawSurface *pdds;
DDPIXELFORMAT ddpf;
ddpf.dwSize = sizeof( ddpf );
if ( FAILED( lpDDSPrimary_CG_DaHeng->GetPixelFormat( &ddpf ) ) )
{
return NULL;
} ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN ;
ddsd.dwWidth = wid;
ddsd.dwHeight = hei; ddsd.ddpfPixelFormat = ddpf; HRESULT hr = pdd->CreateSurface(&ddsd, &pdds, NULL);
if ( hr != DD_OK)
{
const TCHAR *pSz = DXGetErrorDescription9(hr); return NULL;
}
return pdds;