洞察在数字化转型过程中,信创推动企业有效整合资源,实现低成本、高效率的跨平台小程序运营。
970
2022-08-30
Qt实现一个简易截图工具(支持缩放、移动、保存、复制到粘贴板)
概述
windows平台,使用Qt Widget实现一个简易截图工具,支持选区角落拖动缩放、选区移动,支持保存,复制到粘贴板,支持快捷键调出截图、退出截图。暂不支持对截图进行编辑操作,以及鼠标移动到程序窗口可以自动识别,后去有需求可以加上。
先看效果:
选区后会弹出三个按钮,从左到右分别是:退出、保存到文件、复制到粘贴板。如果选择复制到粘贴板,就可以直接在其他地方进行粘贴截图。
当鼠标在选区上下左右四个角落按下后会出现操作选区,此时拖动鼠标可以改变选区大小。 选区左上角可以实时显示选区的尺寸。
快捷键操作: Alt+A : 开始截图 Esc:退出截图
正文
截图部分关键代码,使用windows接口实现
int width = GetSystemMetrics(SM_CXVIRTUALSCREEN); int height = GetSystemMetrics(SM_CYVIRTUALSCREEN); // 获取窗口的设备上下文(Device Contexts) HDC hdcWindow = GetDC(GetDesktopWindow()); // 要截图的窗口句柄,为空则全屏 // 获取设备相关信息的尺寸大小 int nBitPerPixel = GetDeviceCaps(hdcWindow, BITSPIXEL); CImage image; image.Create(width, height, nBitPerPixel); BitBlt(image.GetDC(), // 保存到的目标 图片对象 上下文 0, 0, // 起始 x, y 坐标 width, height, // 截图宽高 hdcWindow, // 截取对象的 上下文句柄 0,0, /*m_pParentView->x(), m_pParentView->y(),*/ // 指定源矩形区域左上角的 X, y 逻辑坐标 SRCCOPY ); // 释放 DC句柄 ReleaseDC(nullptr, hdcWindow); // 释放图片上下文 image.ReleaseDC(); WCHAR wfile[256]; memset(wfile,0, sizeof(wfile)); tempSavePath.toWCharArray(wfile); HRESULT result = image.Save(wfile, Gdiplus::ImageFormatPNG); QImage shot = cutImage(rect, QImage(tempSavePath)); if (bSave) { bool bResult = shot.save(savePath, "png"); }
将图片数据复制到系统粘贴板中:
QMimeData * mimeData = new QMimeData;mimeData->setImageData(shot);qApp->clipboard()->setMimeData(mimeData);
注:shot是QImage类型。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~