DirectDraw的Surface是32位的,我要显示24位,16位,8位BMP图,怎么办?怎么进行全屏显示?

jmcooler 2007-03-06 09:43:00
DirectDraw的Surface是32位的,我要显示24位,16位,8位BMP图,怎么办?怎么进行全屏播放?
...全文
569 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
viewerviewer 2007-03-07
  • 打赏
  • 举报
回复
ddsd.ddpfPixelFormat.dwRGBBitCount 要对应于8,16,24,32
viewerviewer 2007-03-07
  • 打赏
  • 举报
回复
把这些去掉试试:
ddsd.ddpfPixelFormat.dwRBitMask = 0xff0000;
ddsd.ddpfPixelFormat.dwGBitMask = 0xff00;
ddsd.ddpfPixelFormat.dwBBitMask = 0xff;
viewerviewer 2007-03-06
  • 打赏
  • 举报
回复
可以创建24,16bit的Surface的啊
jmcooler 2007-03-06
  • 打赏
  • 举报
回复
我在创建主表面时,没有设置象素格式,而在创建离屏(OFFSCREENPLAIN)表面时设置了象素格式如下:
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 = nVidWidth;
ddsd.dwHeight = nVidHeight;
ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB;
ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat);
ddsd.ddpfPixelFormat.dwRGBBitCount = 24;
switch( nClrDepth )
{
case 8:
ddsd.ddpfPixelFormat.dwRBitMask = 0xFF0000;
break;
case 15: //RGB555
ddsd.ddpfPixelFormat.dwRBitMask = 0x7c00;
ddsd.ddpfPixelFormat.dwGBitMask = 0x3e0;
ddsd.ddpfPixelFormat.dwBBitMask = 0x1f;
break;
case 16: //RGB565
ddsd.ddpfPixelFormat.dwRBitMask = 0xf800;
ddsd.ddpfPixelFormat.dwGBitMask = 0x7e0;
ddsd.ddpfPixelFormat.dwBBitMask = 0x1f;
break;
case 24:
ddsd.ddpfPixelFormat.dwRBitMask = 0xff0000;
ddsd.ddpfPixelFormat.dwGBitMask = 0xff00;
ddsd.ddpfPixelFormat.dwBBitMask = 0xff;
break;
case 32:
ddsd.ddpfPixelFormat.dwRBitMask = 0xff0000;
ddsd.ddpfPixelFormat.dwGBitMask = 0xff00;
ddsd.ddpfPixelFormat.dwBBitMask = 0xff;
break;
default:
return FALSE;
}
ddrval = m_lpDDraw->CreateSurface( &ddsd, &m_lpddsBack, NULL );
我用24位测试,则返回一个(象素格式不正确的)错误

2,553

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧