10天了, BITBLT截图问题>>>>>>>>

jiaxueq 2016-07-04 03:43:19
加精
【做一款游戏的截图】
BitBlt destHDC, 0, 0, ScreenWidth, ScreenHeight, srcHDC, 0, 0, SRCCOPY

N卡,使用最近版本的显示驱动,游戏全屏运行下,第一次 biltblt 能成功截图A。

后面再bitblt ,都截的是和前面相同的图A。

如果切到桌面,再返回游戏,bitblt又可以成功截图一张B,再按bitblt,又是相同的图B。

感觉 是显示的图象数据没同步进内存? 对不起,图形不专业。

怎么解决呢?




...全文
1391 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaxueq 2016-07-19
  • 打赏
  • 举报
回复
2015.12月以前的驱动都是可以在游戏中正常截图的。 2016年 新出的驱动,都是这样的问题了(目前只发现在这款游戏全屏才有截图只能截一张,后面都是相同的问题) 估计是NV显卡,为了提升性能才导致这样的问题了。
o0DRoc0o 2016-07-15
  • 打赏
  • 举报
回复
不错啊 挺好的
三条猫 2016-07-14
  • 打赏
  • 举报
回复
bitblt截图没有直接操作显存,游戏截图最好是调用dx的函数。
qq_35605040 2016-07-14
  • 打赏
  • 举报
回复
666666666
qq_35605040 2016-07-14
  • 打赏
  • 举报
回复
666666666
qq_35605040 2016-07-14
  • 打赏
  • 举报
回复
666666666
linda9989 2016-07-12
  • 打赏
  • 举报
回复
注意要是在本进程操作(你远程注入、导入表启动都行)
linda9989 2016-07-12
  • 打赏
  • 举报
回复
引用 楼主 jiaxueq 的回复:
【做一款游戏的截图】 BitBlt destHDC, 0, 0, ScreenWidth, ScreenHeight, srcHDC, 0, 0, SRCCOPY N卡,使用最近版本的显示驱动,游戏全屏运行下,第一次 biltblt 能成功截图A。 后面再bitblt ,都截的是和前面相同的图A。 如果切到桌面,再返回游戏,bitblt又可以成功截图一张B,再按bitblt,又是相同的图B。 感觉 是显示的图象数据没同步进内存? 对不起,图形不专业。 怎么解决呢?
win7显卡全屏时是独站工作模式就会导致你说的这个问题 你不能再使用blt系列GDI函数了,使用opengl gReadPix 或者D3D系列的
sinat_35574283 2016-07-11
  • 打赏
  • 举报
回复
继续学习中,受教了
sinat_35574283 2016-07-11
  • 打赏
  • 举报
回复
是的一般都用DX来截图
jiaxueq 2016-07-10
  • 打赏
  • 举报
回复
这种情况,估计GDI截图是不好搞了,只能用DX来截图了。
jiaxueq 2016-07-09
  • 打赏
  • 举报
回复
引用 18 楼 aa123654ss 的回复:
你用键盘上Prt Scr试试截图有没有问题呢?
一样的情况哈~~~ 有感兴趣的,可以来尝试下。 有环境和代码。 有感兴趣的,可以来尝试下。 有环境和代码。
aa123654ss 2016-07-09
  • 打赏
  • 举报
回复
你用键盘上Prt Scr试试截图有没有问题呢?
jiaxueq 2016-07-08
  • 打赏
  • 举报
回复
引用 12 楼 starhuhu 的回复:
思路: 1、你确认两次截图之间,游戏渲染函数有没有继续执行,不要在你的截屏期间阻塞了渲染的执行。如果是这样,当然结果是一样的了; 2、试试多线程,把截屏操作和主渲染循环放到 不同的线程中进行;
这个就不太懂了,反正 2015年12月 的以前的驱动是正常截图的。 就今年新出的才这有个问题。 而且试了网上各种主流截屏软件,都是一样的情况。 看来估计都是使用bitblt之类的函数做的吧。
jiaxueq 2016-07-08
  • 打赏
  • 举报
回复
sorry ,打错字了, 2016年以前的驱动,比如2015年12月的
jiaxueq 2016-07-08
  • 打赏
  • 举报
回复
引用 10 楼 draculamx 的回复:
你的游戏窗口是什么状态?? 是普通窗口?窗口最大化全屏?还是真正的全屏?? 最后一种情况你用BitBlt是截不到图的,必须弄清楚游戏是用的哪种图像渲染方式才行。 在windows下无非就是opengl和dx,其实最终还是dx,因为opengl在windows下面,底层还是调用的DX。 所以你需要hook directx的最终渲染函数就可以了。
游戏为真正全屏,这个可以肯定的。 NV显卡,使用2016以年的驱动,是没问题的。截图一切OK。 就是今年新出的显卡驱动,才有这种问题。 进入游戏,只能截一张,后面截的都是一样的。 当你切到桌面上,再进游戏,又可以截一张新的。。。
starhuhu 2016-07-07
  • 打赏
  • 举报
回复
思路: 1、你确认两次截图之间,游戏渲染函数有没有继续执行,不要在你的截屏期间阻塞了渲染的执行。如果是这样,当然结果是一样的了; 2、试试多线程,把截屏操作和主渲染循环放到 不同的线程中进行;
qq_35536084 2016-07-07
  • 打赏
  • 举报
回复
这个我也不知道问题我还是看不懂呵呵
draculamx 2016-07-07
  • 打赏
  • 举报
回复
你的游戏窗口是什么状态?? 是普通窗口?窗口最大化全屏?还是真正的全屏?? 最后一种情况你用BitBlt是截不到图的,必须弄清楚游戏是用的哪种图像渲染方式才行。 在windows下无非就是opengl和dx,其实最终还是dx,因为opengl在windows下面,底层还是调用的DX。 所以你需要hook directx的最终渲染函数就可以了。
cattpon 2016-07-07
  • 打赏
  • 举报
回复
应该是取得到的~
加载更多回复(10)

19,469

社区成员

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

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