请教ddraw PrimarySurface画图问题

jamspen 2013-05-28 01:42:49
32位窗口模式1024×768的PrimarySurface,先lock,然后memcpy 32位rgb数据到缓存,最后unlock显示
现在的问题是这样的:

DDRAW_INIT_STRUCT(ddsd);
if (FAILED(lpddsback->Lock(NULL, &ddsd,
DDLOCK_SURFACEMEMORYPTR | DDLOCK_WRITEONLY,
NULL)))
return 0;


UINT *video_buffer = (UINT *)ddsd.lpSurface;


memcpy(video_buffer,myrgb,sizeof(myrgb);



如果32位的rgb数据分辨率也是1024*768,显示正常,如果宽度是512的,则显示左右两个图像,如果宽度是其他值,比如800,640这种,就会花屏,请问该如何显示任意宽度的RGB数据啊?还有再请问一下,如果是16位或者24位的RGB数据,又该怎么拷贝到video_buffer使其正确显示?





...全文
75 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
i_dovelemon 2013-06-19
  • 打赏
  • 举报
回复
这个好像需要手动来,没有硬件加速这个吧。。。新手,正在学DirectDraw
jamspen 2013-05-29
  • 打赏
  • 举报
回复
继续提问,如果是直接画内存中的32位RGB数据,memcpy到PrimarySurface是最快的显示方法,但如果是16位的rgb数据,memcpy的时候需要手动填充到32位的surface,有没有硬件加速的函数可以直接把16位的数据复制到32位的表面上显示?
jamspen 2013-05-28
  • 打赏
  • 举报
回复
自己搞定,一行一行复制数据就可以了。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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