如何才能够把内存中的RGB数据写到DirectDraw的surface中,并且显示出来呢?

capboy 2001-12-21 02:12:01
我有段RGB数据,在内存中(没有其他的信息,比如说明bmp文件头什么的,只是RGB的raw数据),我把他写到directdraw的surface中,可是显示的是倒的数据,并且颜色好像不对,而且只有原来的一半大小,我猜只有16色...可是源是16位的...
if(FAILED(lpDDSPrimary->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL)))
{
AfxMessageBox("could not lock the primary surface");
}
pTxtBuffer = (BYTE *)ddsd.lpSurface;
for(int y = 0; y < m_lVidHeight; y++ ) {
BYTE *pBmpBufferOld = pBmpBuffer;
BYTE *pTxtBufferOld = pTxtBuffer;
for (int x = 0; x < m_lVidWidth ; x++) {
pTxtBuffer[x] = pBmpBuffer[x];
}
pBmpBuffer = pBmpBufferOld + m_lVidPitch;
pTxtBuffer = pTxtBufferOld + ddsd.lPitch;
}
if(FAILED(lpDDSPrimary->Unlock(NULL)))
{
AfxMessageBox("could not unlock the primary surface");
}
...全文
245 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
capboy 2001-12-25
  • 打赏
  • 举报
回复
谢谢..
hboy 2001-12-24
  • 打赏
  • 举报
回复
你的Bmp文件颜色深度必须与DirectDraw的Surface颜色深度一样,如果是倒的,很正常,在负值时一个倒着循环就可。
capboy 2001-12-24
  • 打赏
  • 举报
回复
还有人么?
babytiger 2001-12-23
  • 打赏
  • 举报
回复
学习学习,upup
capboy 2001-12-23
  • 打赏
  • 举报
回复
谢谢...
klins182001 2001-12-22
  • 打赏
  • 举报
回复
对不起了,capboy,我也是个菜鸟,不过有几点建议,希望你注意以下:
首先,你说显示的图像是倒的,那我就怀疑你的raw bitmap图是从bmp文件采下来的,而bmp文件
存放bitmap图有它自己的格式,值得一提的是bmp文件存放bitmap以行为单位上下颠倒着放,即
最下一行存为bmp文件时成为第一行,相应的,原先最上面一行就成了bmp文件的最末行;同时,
每一行bmp数据又要求4字节对齐,如果对于一16位图,行数是奇数的话,那么bmp文件一行的字节
数不是4的倍数,就需要填充若干字符,以使行字节数能被4整除。
capboy,我发现你源程序里没有对以上几点作相应处理,而且m_lVidWidth 也不知道单单是行数
还是行数的2倍(因为你说源图是16位的),希望你再考虑一下


capboy 2001-12-22
  • 打赏
  • 举报
回复
有人知道么?

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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