C++实现截屏(屏幕快照)功能(二)

        一些软件尝尝需要截屏或是软件使用快照的功能,方便后续做一些数据对比或是校验,尤其工业软件,该文章意在记录仅使用Windows自带库实现截屏的功能。仅供参考。

        同《C++实现截屏(屏幕快照)功能(一)》相比灵活性更大,可以支撑多种图片格式,只需要满足图像文件格式常量类型,不需要特意指定,直接按文件后缀即可,另外也解决了截图时只想根据某个窗口句柄来获取的问题,获取句柄的方式也比较多,这里也不再添加。有必要后续添加一篇文章。

#include "TestCaptureScreen.h"
#include <atlimage.h>
#include <string>
/*
name 保存的截图文件名称
hwnd 要截屏的窗口句柄
desx 从源上裁剪的起始x位置
desy 从源上裁剪的起始y位置
desW 截图的宽度
desH 截图的高度
*/
void CaptureScreen(std::string outName, HWND hwnd,int desx,int desy,int desW,int desH)
{
    hwnd = hwnd == NULL ? GetDesktopWindow(): hwnd;//若为NULL,默认获取桌面的
    HDC hDc = GetDC(hwnd);
    //函数功能:该函数检索指定设备的设备指定信息。
    //BITSPIXEL:像素相连颜色位数;
    int bitOfPix = GetDeviceCaps(hDc, BITSPIXEL);
    //int desW = GetDeviceCaps(hDc, HORZRES);
    //int desH = GetDeviceCaps(hDc, VERTRES);
    UINT dpi = GetDpiForWindow(hwnd);
    float scale;
    switch(dpi) {
        case 96:
            scale = 1;
            break;
        case 120:
            scale = 1.25;
            break;
        case 144:
            scale = 1.5;
            break;
        case 192:
            scale = 2;
            break;
        case 216:
            scale = 2.25;
            break;
        default:
            scale = 1;
            break;
    }
    desW *= scale;
    desH *= scale;
    CImage image;

    image.Create(desW, desH, bitOfPix);
    BitBlt(image.GetDC(), 0, 0, desW, desH, hDc, desx, desy,SRCCOPY);
    image.Save(outName.c_str());
    image.ReleaseDC();
    ReleaseDC(hwnd, hDc);
}
int main()
{
    CaptureScreen("截图.png", NULL, 70, 0, 1000, 1000);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值