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类型。
【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】
点击这里:
Copyright © 2015-2022 西南产业网版权所有 备案号:皖ICP备2022009963号-8 联系邮箱:39 60 29 14 2@qq.com