开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

收起左侧

[易语言纯源码] DXGI高效率抓屏源码

[复制链接]
发表于 2023-9-28 03:20:35 | 显示全部楼层   贵州省黔西南布依族苗族自治州
#在这里快速回复#f无法无法哇发我
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
发表于 2023-9-16 00:42:31 | 显示全部楼层   广东省东莞市
ojajo 发表于 2022-5-17 15:39
DXGI截取到的像素点阵数据已保存在“m_bin”处,像素排列顺序为:BGRA,BGAR ... BGRA
现想要得到一张BMP3 ...

这个问题挺麻烦的..转换的效率很低...字节集无法直接走指针的模式..其实最好的办法就是dxgi在取出像素的时候 用指针偏转一次..我现在通过内存的方式绘画出来..然后反向指针了一次,效率只能说勉勉强强...
回复 支持 反对

使用道具 举报

发表于 2023-8-3 06:03:32 | 显示全部楼层   四川省绵阳市
沈龙泉 发表于 2023-5-28 15:24
大佬,他这个源码怎么写成字节集啊?

好久没弄了,找到代码了  方式太多了,发几段处理方法把

.版本 2

time1 = _GetCurrenTime ()
.判断循环首 (真)
    m_hDxgi.GetFrame (m_bin)  ' 0.08毫秒
    m_bmpHandle = CreateBitmap (m_nWidth, m_nHeight, 1, 32, m_bin)  ' 4毫秒
    see.从位图句柄创建 (m_bmpHandle, 24)  ' 11毫秒
    DeleteObject (m_bmpHandle)
    .如果真 (see.取某点颜色 (11, 22) > 0 或 see.取某点颜色 (1900, 1000) > 0 或 _GetCurrenTime () - time1 > 1000)
        跳出循环 ()
    .如果真结束
    处理事件 ()
.判断循环尾 ()
picsize = see.取颜色点阵大小 ()  '
piczjj = see.取出位图数据 ()  ' 2毫秒
memcpy (ddd, 字节集_取指针 (piczjj), picsize)  ' 1.3毫秒
piczjj = 取空白字节集 (picsize)
.如果真 (picsize > 0)
    返回 (picsize)
.如果真结束
返回 (0)
那个see是精益模块的位图处理类





.版本 2

SelectObject (newdc, oldbmp)  ' 再次调用首先还原桌面兼容的位图,同时释放原本被内存DC锁定的m_bmpHandle位图资源,
DeleteDC (newdc)  ' 删除这个使用过内存设备
m_hDxgi.GetFrame (m_bin, w, h)  ' 0.04毫秒一次     如果加了如果真的判断,win10新特性会导致等待屏幕发生变化,才返回有效,有效节约资源(大循环判断即可),这导致必须跟着win10的刷新率过来,不判断则无脑截,我们这里需要极速识别不能没有数据
.如果真 (m_bmpHandle ≠ 0)
    DeleteObject (m_bmpHandle)  ' 如果前面不还原, 这里是释放不掉
.如果真结束

m_bmpHandle = CreateBitmap (w, h, 1, 32, m_bin)  ' 4毫秒1次  因为dxgi创建的位图都是32位,这边逐行按点(4字节)写入m_bin
newdc = CreateCompatibleDC (0)  ' 新建桌面兼容的位图,起初只有1 1的位图量,为空
oldbmp = SelectObject (newdc, m_bmpHandle)  ' 把m_bmpHandle   DDB位图放入桌面兼容DC

.如果真 (m_bmpHandle ≠ 0)
    返回 (newdc)  ' 对外使用这个DC内容。
.如果真结束
返回 (0)
这个是用桌面dc





.版本 2
.支持库 YunImage

m_hDxgi.GetFrame2 (m_bin)  ' Dxgi+gdi+输出的24位图,大漠会花, 最佳方案是在创建gdi图以后复制出想要的区域越小越好,再直接写出文件,用大漠转换成24位图去用。 大漠转换全图250毫秒,小图0.5毫秒...
juxing.左边 = x  ' 用于dxgi+gdiplus调试      剪辑数据区域
juxing.顶边 = y
juxing.宽度 = w
juxing.高度 = h
new.创建自扫描行 (m_nWidth, m_nHeight, 7680, 2498570, m_bin)  ' 速度很快 32bppARGB 2498570   32bppRGB 139273     24bppRGB 137224  0.09ms
new.复制部分 (juxing, 2498570, new)
' 调试输出 (进制_十到十六 (ARGB到RGB (new.取某点颜色 (17, 11))))
' new.取位图句柄 ()  ' 全屏10毫秒   给各种bitblt的兼容dc用
piczjj = 取空白字节集 (picsize)
piczjj = new.保存到字节集 (“{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}”)  ' 全屏10毫秒1次其他都不要时间    给传递回给大漠使用 “{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}”  bmp  8ms
' 写到文件 (“d:\123123.bmp”, piczjj)  ' 实际上写出文件时间并不多
new.销毁 ()
Yunimage.从内存解码 (piczjj, 1)  ' 这里不能用从位图创建,   8ms
piczjj = 取空白字节集 (picsize)
Yunimage.编码到内存 (piczjj, 1)  ' 6ms,  
' Yunimage.编码到文件 (“d:\tetet.bmp”, 1)
picsize = 取字节集长度 (piczjj)
memcpy (ddd, 字节集_取指针 (piczjj), picsize)  ' 1.3毫秒一次
' Gdiplus关闭 (biaoji)        '
返回 (picsize)
new是 gdi plus 模块的GP位图。。   yunimage是云外归鸟的图像支持库
回复 支持 1 反对 0

使用道具 举报

发表于 2023-8-3 05:43:10 | 显示全部楼层   四川省绵阳市
a3363558 发表于 2022-11-23 13:35
云的模块?具体叫啥?没搜索到这个模块

云外归鸟,  自己改写一下argb点阵到内存那里的写入也可以,记得最后处理字节集用论坛的字节集加速模块,效果挺好
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2023-5-28 15:24:15 | 显示全部楼层   贵州省遵义市
smileh81315 发表于 2022-10-17 06:18
厉害啊,1920 1080合成一张1ms  写成字节集的话4ms一张, 很快了,颠倒的话用云的模块翻转一下即可,顺便调 ...

大佬,他这个源码怎么写成字节集啊?
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2023-5-11 00:14:44 | 显示全部楼层   四川省达州市
88888888888888888888888888888
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2023-5-11 00:14:31 | 显示全部楼层   四川省达州市
66666666666666666666
回复 支持 反对

使用道具 举报

发表于 2023-3-11 02:41:40 | 显示全部楼层   湖北省荆州市
咋保存图片呢

回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2023-2-25 23:44:22 | 显示全部楼层   山东省济宁市
跟着学习了
回复 支持 反对

使用道具 举报

结帖率:89% (79/89)

签到天数: 13 天

发表于 2023-1-27 21:19:14 | 显示全部楼层   江苏省苏州市
啪啪啪么么哒 发表于 2018-7-16 14:02
MirrorDriver技术,不过比较复杂

游戏全屏截取不到,怎么解
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表