首页 > 系统相关 >Windows中使用GDI抓图

Windows中使用GDI抓图

时间:2023-05-25 10:35:00浏览次数:44  
标签:抓图 Windows deprecated int target GDI include your QT

首先在pro文件中添加gdi32

QT       += core gui winextras

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

LIBS += -lgdi32

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    screen_capture.cpp

HEADERS += \
    screen_capture.h

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

截取屏幕图像源码如下:

#include <QDateTime>
#include <QDebug>
#include <QPixmap>
#include <QtWin>
#include <Windows.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 获取屏幕的设备上下文
    HDC hScreenDC = GetDC(NULL);

    // 获取屏幕的宽度和高度
    int screenWidth = GetSystemMetrics(SM_CXSCREEN);
    int screenHeight = GetSystemMetrics(SM_CYSCREEN);

    int counts = 0;
    /* 每隔1秒获取一次图像 */
    while (counts < 5) {
        QString fileName = QString("%1.png").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss"));
        qDebug() << fileName;

        // 创建一个内存设备上下文
        HDC hMemDC = CreateCompatibleDC(hScreenDC);

        // 创建一个位图对象,用于存储屏幕图像
        HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, screenWidth, screenHeight);

        // 将位图对象选入内存设备上下文
        HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);

        // 从屏幕设备上下文复制图像到内存设备上下文
        BitBlt(hMemDC, 0, 0, screenWidth, screenHeight, hScreenDC, 0, 0, SRCCOPY);

        QPixmap pixmap = QtWin::fromHBITMAP(hBitmap);
        pixmap.save(fileName, "PNG");

        // 清理资源
        SelectObject(hMemDC, hOldBitmap);
        DeleteObject(hBitmap);
        DeleteDC(hMemDC);

        counts++;
        Sleep(1000);
    }

    ReleaseDC(nullptr, hScreenDC);

    return a.exec();
}

 

标签:抓图,Windows,deprecated,int,target,GDI,include,your,QT
From: https://www.cnblogs.com/QingYiShouJiuRen/p/17430402.html

相关文章

  • AnyConnect Windows系统的使用教程
    AnyConnectWindows系统的使用教程:1,下载客户端软件CiscoAnyconnect是Cisco(思科)公司推出的官方专用安全链接客户端请放心使用步骤一下载后,安装anyconnect电脑端软件。1.1双击运行安装程序;1.2同意协议后,点击“Next>”;1.3点击“Install”,开始自动安装;1.4安装完成,点击“Finish......
  • UE4 AirSim Windows项目交叉编译Linux包
    1、从Linux环境下AirSim文件夹导入相关.a库至对应路径 2、项目插件中禁用VR相关插件libopenvr_api.soissuewhenbuildingprojectagainstUE4.25·Issue#2889·microsoft/AirSim(github.com) ......
  • windows下将Pikafish编译为安卓可执行文件
    下载AndroidNDKhttps://developer.android.com/ndk/downloads?hl=zh-cn下载Pikafish源码https://github.com/official-pikafish/Pikafish编译在Pikafish的src目录下创建如下bat文件setclang=D:\android-ndk-r25c\toolchains\llvm\prebuilt\windows-x86_64\bin\aar......
  • 如何用windows任务视图管理多个程序,提高.net开发效率
    在Windows操作系统中,任务栏是一个非常重要的工具栏,用来显示当前正在运行的程序和任务。如果同时运行了很多程序,任务栏上的图标就会变得非常拥挤,不方便管理和切换。为了提高工作效率,可以通过任务视图来将这些运行程序分组,以便更好地管理和切换。任务视图是Windows操作系统中的......
  • 基于.NetCore开源的Windows的GIF录屏工具
    推荐一个Github上Start超过20K的超火、好用的屏幕截图转换为GIF动图开源项目。项目简介这是基于.NetCore+WPF开发的、开源项目,可将屏幕截图转为GIF动画。它的核心功能是能够简单、快速地截取整个屏幕或者选定区域,并将其转为GIF动画,还支持自定义GIF动画效果、字幕、背......
  • Windows开机弹窗 Program 无法启动
    Windows任务管理器启动项出现无效项目Program删除方法软件卸载异常,启动项没有被删除电脑启动会出现弹窗显示有Program无效的情况。因为任务管理器启动项有无效的启动项,删除即可。解决方法用户启动项计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run......
  • Windows10 无法更新密码。为新密码提供的值不符合字符域的长度、复杂性或历史要求
    域账号死活无法修改密码,说要求不足,可是AD域几乎不限制密码条件。Ctrl+Alt+Del改自己管理员密码唯一找到的解决方法:只有在勾选"下次变更密码"时使用者换密码系统才会认定符合複杂度要求,这样操作可以正常修改密码    ......
  • windows 卸载软件
    卸载软件点击此电脑直接输入控制面板即可方法二打开此电脑在网络鼠标右键点击属性点击控制面板点击卸载程序找到想要卸载的软件右键卸载即可......
  • Windows系统中使用DXGI截取桌面图像
    DXGI(DirectXGraphicsInfrastructure)图像截取是一种技术,用于从图形设备接口(GraphicsDeviceInterface)中捕获屏幕上的图像数据。它是基于DirectX和DXGI接口的截取方法。以下是DXGI图像截取的原理简介:获取DXGI设备和适配器:首先,通过调用CreateDXGIFactory来创建一个......
  • macos 链接windows 共享打印机
    WINDOWNS上操作:1.在windowns上安装打印机,共享打印机2.安装lpd,打开控制面板>启用或者关闭Windows功能>打印和文件服务>勾选LPD打印服务 MACOS上操作:1.打开系统偏好和设置>打印机与扫描仪  2.添加打印机1)加号添加打印机2......