DirectDraw可以创建指定色深的表面么?
我试过让DDSURFACEDESC2::dwFlags或上DDSD_PIXELFORMAT,并且设定DDSURFACEDESC2::ddpfPixelFormat.dwFlags为DDPF_RGB,然后在32位窗口模式下,给DDSURFACEDESC2::ddpfPixelFormat.dwRGBBitCount赋值为24,结果创建失败。
如果可以的话,CreateSurface的参数怎么填?

解决方案 »

  1.   

    那请LS帮我看看下面这样写有没有问题: DDSURFACEDESC2 ddsd = {0};
    ddsd.dwSize = sizeof(ddsd);
    ddsd.dwWidth = bm.bmWidth; 
    ddsd.dwHeight = bm.bmHeight;
    ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat);
    ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB;
    ddsd.ddpfPixelFormat.dwRGBBitCount = bm.bmBitsPixel;
    ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_CAPS; 
    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
    if (SUCCEEDED(lpdd->CreateSurface(&ddsd, &m_pImage, NULL)))
    {
    //DoSomeThing();
    }
      

  2.   

    CreateSurface失败,错误号是88760091,似乎是无效的PicelFormat意思。
    我在32位模式下,ddsd.ddpfPixelFormat.dwRGBBitCount填16,创建失败;
    但是在16位模式下,ddsd.ddpfPixelFormat.dwRGBBitCount填32,则是创建成功。
      

  3.   

    我知道了,是DDPIXELFORMAT::dwRBitMask等几个成员也需要自己填充,现在已经可以创建24位的表面了,但是将24位的表面Blt到primary的表面做输出显示的时候会失败,错误号是80004001,是因为DirectDraw不支持不同色深的表面之间做Blt吗?不过创建出来的16位的表面却又可以正常显示。