如何将DirectSurface中的图像数据保存为bmp文件

oknight 2005-06-28 06:56:19
菜鸟发问:

偶知道DirectX8之后可以用一个D3D的api实现,大概名字是SaveSurfaceToFile.
可惜偶现在维护的原程序是用DirectDraw7写的,很难改到DirectX8.
目前有两种思路:
1。能否将surface7转换为surface8,然后再用上面那个api完成;
2。直接将surface中的数据存为bmp文件。

恳求各位帮忙!
...全文
224 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2005-06-30
  • 打赏
  • 举报
回复
16bit的需要换一个bmp的头,把里面的颜色深度从24改为16
然后也可以直接写数据
但是需要注意,buffer的宽度必须是2的倍数,否则就不满足bmp的宽度4字节对齐的原则了
寻开心 2005-06-30
  • 打赏
  • 举报
回复
http://vic2.nchc.org.tw/lxr/http/source/encoder-mpeg4.cpp
http://vic2.nchc.org.tw/lxr/http/source/这个文件夹下有好多呢
oknight 2005-06-30
  • 打赏
  • 举报
回复
另外还想请教一下各位老大有没有mpeg4解码的源代码?
oknight 2005-06-30
  • 打赏
  • 举报
回复
偶说的是windows的显示属性设为16bit,但位图还是按照24bit存储的。
找到了以前的一个帖子:http://community.csdn.net/Expert/TopicView1.asp?id=4012838
同时感谢各位帮忙,问题基本搞定了,不过速度还不够理想。
另外不知显示属性能否设为24bit。偶的显卡只能设置为256色/16位/32位。
an_bachelor 2005-06-29
  • 打赏
  • 举报
回复
呵呵 要做圖形圖像又不想了解BMP格式怎麽行啊

要不你還是做數據庫算了
寻开心 2005-06-29
  • 打赏
  • 举报
回复
不懂bmp,也懒得研究?

这个是做程序的基础啊,最最基础的啦
oknight 2005-06-29
  • 打赏
  • 举报
回复
现在基本上搞定了。
是直接读surface中的数据,然后按bmp格式保存下来。
已在显示属性设为32bit的环境下运行成功,bmp是按24位保存的。
不知道在16bit环境下该如何处理,还请大家指教。
DentistryDoctor 2005-06-29
  • 打赏
  • 举报
回复
如果是不带调色板的位图,直接在前面写个BITMAPINFOHEADER,然后在后面写上位数据就可以了。
Practise_Think 2005-06-29
  • 打赏
  • 举报
回复
directdraw 没有直接保存成BMP文件的对象方法,这需要你在Lock()后得到显存指针里的像素数据提取出来,再加上BMP头才行行的,这不难,只是16 bit有点麻烦而已,
oknight 2005-06-29
  • 打赏
  • 举报
回复
最好利用buffer的格式转换功能转换到32位的a8r8g8b8的格式,
然后直接锁定数据,当作bmp文件的数据
那样不用考虑bmp文件当中的4字节对齐的问题
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

呵呵,砖头倒是不少。
小弟只需要存成bmp文件即可,不用再对图形作其它处理,所以也就想偷点懒
oknight 2005-06-28
  • 打赏
  • 举报
回复
小弟不懂bmp,也懒得研究。格式?rgb?转换?太抽象了。能否给点直接的东东?
寻开心 2005-06-28
  • 打赏
  • 举报
回复
最好利用buffer的格式转换功能转换到32位的a8r8g8b8的格式,
然后直接锁定数据,当作bmp文件的数据
那样不用考虑bmp文件当中的4字节对齐的问题
寻开心 2005-06-28
  • 打赏
  • 举报
回复
自己写入bmp
参看http://community.csdn.net/Expert/topic/4110/4110493.xml?temp=.3898279

19,469

社区成员

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

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