MFC 截取对话框生成图片、截取整个屏幕(可取黑白反色或者整体图片取反色)

HWND hwnd = ::GetDesktopWindow();//截整个屏幕,用从这往下4句HDC hdc = ::GetDC(hwnd);CDC dc;dc.Attach(hdc);CRect rc,rcw;GetWindowRect(&rcw);GetClientRect(&rc);//只截对话框,用这句//rc.SetRect(0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));//截整个屏幕,用这句int iBitPerPixel = dc.GetDeviceCaps(BITSPIXEL);int iWidth = rc.Width();int iHeight = rc.Height();int pointx = rcw.left;int pointy = rcw.top;CDC memDC;memDC.CreateCompatibleDC(&dc);CBitmap memBitmap, *oldBitmap;memBitmap.CreateCompatibleBitmap(&dc, iWidth, iHeight);oldBitmap = memDC.SelectObject(&memBitmap);memDC.BitBlt(0, 0, iWidth, iHeight, &dc, pointx, pointy, SRCCOPY);BITMAP bmp;memBitmap.GetBitmap(&bmp);FILE *fp = fopen("test22222.bmp", "wb");BITMAPINFOHEADER bih;memset(&bih, 0, sizeof(bih));bih.biBitCount = bmp.bmBitsPixel;bih.biCompression = BI_RGB;//表示不压缩bih.biHeight = bmp.bmHeight;bih.biPlanes = 1;//位平面数,必须为1bih.biSize = sizeof(BITMAPINFOHEADER);bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;bih.biWidth = bmp.bmWidth;BITMAPFILEHEADER bfh;memset(&bfh, 0, sizeof(bfh));bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;bfh.bfType = (WORD)0x4d42;//必须表示"BM"fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);fwrite(&bih, 1, sizeof(bih), fp);byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight];GetDIBits(memDC.m_hDC, (HBITMAP)memBitmap.m_hObject, 0, iHeight, p, (LPBITMAPINFO)&bih, DIB_RGB_COLORS);fwrite(p, 1, bmp.bmWidthBytes * bmp.bmHeight, fp);delete[] p;fclose(fp);memDC.SelectObject(oldBitmap);

取反色代码

HWND hwnd = ::GetDesktopWindow();//截整个屏幕,用从这往下4句HDC hdc = ::GetDC(hwnd);CDC dc;dc.Attach(hdc);CRect rc,rcw;GetWindowRect(&rcw);GetClientRect(&rc);//只截对话框,用这句//rc.SetRect(0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));//截整个屏幕,用这句int iBitPerPixel = dc.GetDeviceCaps(BITSPIXEL);int iWidth = rc.Width();int iHeight = rc.Height();int pointx = rcw.left;int pointy = rcw.top;CDC memDC;memDC.CreateCompatibleDC(&dc);memDC.SetROP2(R2_NOT);CBitmap memBitmap, *oldBitmap;memBitmap.CreateCompatibleBitmap(&dc, iWidth, iHeight);oldBitmap = memDC.SelectObject(&memBitmap);memDC.BitBlt(0,0 , iWidth, iHeight, &dc, pointx, pointy, SRCCOPY);BITMAP bmp;memBitmap.GetBitmap(&bmp);FILE *fp = fopen("Data\\test22222.bmp", "wb");BITMAPINFOHEADER bih;memset(&bih, 0, sizeof(bih));bih.biBitCount = bmp.bmBitsPixel;bih.biCompression = BI_RGB;//表示不压缩bih.biHeight = bmp.bmHeight;bih.biPlanes = 1;//位平面数,必须为1bih.biSize = sizeof(BITMAPINFOHEADER);bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;bih.biWidth = bmp.bmWidth;BITMAPFILEHEADER bfh;memset(&bfh, 0, sizeof(bfh));bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;bfh.bfType = (WORD)0x4d42;//必须表示"BM"fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);fwrite(&bih, 1, sizeof(bih), fp);byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight];GetDIBits(memDC.m_hDC, (HBITMAP)memBitmap.m_hObject, 0, iHeight, p, (LPBITMAPINFO)&bih, DIB_RGB_COLORS);int pixels = bmp.bmWidth *bmp.bmHeight;//for (int i = 0; i < pixels; i++)// 整体取反色//{//	BYTE red = p[i * 4];//	BYTE green = p[i * 4 + 1];//	BYTE blue = p[i * 4 + 2];//	p[i * 4] = 255 - red;//	p[i * 4 + 1] = 255 - green;//	p[i * 4 + 2] = 255 - blue;//}// 黑取白for (int i = 0; i < pixels; i++){BYTE red = p[i * 4];BYTE green = p[i * 4 + 1];BYTE blue = p[i * 4 + 2];if (red == 0 && green == 0 && blue == 0) {p[i * 4] = 255 - red;p[i * 4 + 1] = 255 - green;p[i * 4 + 2] = 255 - blue;}}fwrite(p, 1, bmp.bmWidthBytes * bmp.bmHeight, fp);delete[] p;fclose(fp);memDC.SelectObject(oldBitmap);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动驾驶传感器:惯性导航IMU原理

自动驾驶传感器&#xff1a;惯性导航IMU原理 附赠自动驾驶学习资料和量产经验&#xff1a;链接 组合导航里包含了GNSS卫星导航模块与IMU惯性导航模块&#xff0c;前一篇文章写了GNSS模块&#xff0c;本章写IMU惯导&#xff0c;也是本系列最后一篇文章。 1. 惯性测量单元&…

瑞_23种设计模式_观察者模式

文章目录 1 观察者模式&#xff08;Observer Pattern&#xff09;1.1 介绍1.2 概述1.3 观察者模式的结构1.4 观察者模式的优缺点1.5 观察者模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK中提供的观察者模式实现 ★4.1 Observable类4.2 Obse…

Spark分区表插入数据清空分区数据问题的解决办法

原本希望通过Spark的DataFrame的saveAsTable自动创建 然后再通过insertInto或者别的方式插入分区&#xff0c;结果发现这些方法都不可行&#xff0c;每一次运行会自动truncate清空原来的数据。哪怕是加了条件判断&#xff0c;通过createOrReplaceGlobalTempView的方式去执行Spa…

05. 【Android教程】Android 程序签名打包

在上一章&#xff0c;我们创建了自己的 Android 工程&#xff0c;并成功的在模拟器中运行起来。同时提到&#xff0c;工程目录中有一个 bin 目录&#xff0c;运行之后我们可以在此目录下找到我们的 apk。那么不难想到&#xff0c;我们在点“Run”之后&#xff0c;系统会编译我们…

蓝桥杯嵌入式之串口(中断读取)

一、CUbeMX开启串口 1.开启串口USART1 记得手动开起PA9、PA10 2.配置波特率、开启串口中断 3.初始化开启接收中断 定于接收缓存区接收长度&#xff08;单位字节&#xff09; 4.在接收事件回调函数中进行操作 sscanf((char*)usart_box,"%4s",temp1); //只取收到的…

高频SQL 产品销售分析 I

题目信息 销售表 Sales&#xff1a; -------------------- | Column Name | Type | -------------------- | sale_id | int | | product_id | int | | year | int | | quantity | int | | price | int | -------------------- (sale_id, yea…

以太网链路聚合——增加带宽,解决生成树收敛慢的问题

目录 一.对STP生成树的补充 1.STP接口状态 2.STP生成树的改进 二.网络可靠性 1.单板可靠性 2.设备可靠性 3.链路可靠性 三.链路聚合 1.多条链路聚合增加带宽 2.链路聚合术语 四.链路聚合模式 1.手动模式 2.LASP模式 &#xff08;1).LASP术语 &#xff08;2&…

使用itext-core生成PDF

1、添加引用依赖包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-core</artifactId><version>8.0.3</version><type>pom</type></dependency> 2、上代码 package com.student.demo.pdf;impor…

什么是RISC-V?开源 ISA 如何重塑未来的处理器设计

RISC-V代表了处理器架构的范式转变&#xff0c;特点是其开源模型简化了设计理念并促进了全球community-driven的开发。RISC-V导致了处理器技术发展前进方式的重大转变&#xff0c;提供了一个不受传统复杂性阻碍的全新视角。 RISC-V起源于加州大学伯克利分校的学术起点&#xff…

逐步学习Go-协程goroutine

参考&#xff1a;逐步学习Go-协程goroutine – FOF编程网 什么是线程&#xff1f; 简单来说线程就是现代操作系统使用CPU的基本单元。线程基本包括了线程ID&#xff0c;程序计数器&#xff0c;寄存器和线程栈。线程共享进程的代码区&#xff0c;数据区和操作系统的资源。 线…

前端学习-01:Windows 安装 npm 教程

一、安装 Node.js Node.js 官方下载地址&#xff1a;点击这里点击绿色的"Download Node.js vxxxx"下载完成后双击开始安装点击 Next 接受协议&#xff0c;点击 Next 点击 Change&#xff0c;自定义安装目录&#xff0c;然后点击 Next 所有默认全部安装即可&#xff…

在 Linux CentOS 中安装 Docker Engine(Dockers 引擎)【图文详解】

官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 操作系统要求 如果我们要在 CentOS 中安装 Docker 引擎&#xff0c;那么 CentOS 操作系统需要是以下版本之一的&#xff0c;且是处于维护的 CentOS 版本&#xff1a; CentOS 7CentOS Stream 8CentOS Str…

关于C/C++头文件引起的编译问题

在 C 中&#xff0c;#include 是用于包含头文件的预处理指令。头文件是包含函数声明、类定义、常量等的文件&#xff0c;通常以 .h 或 .hpp 作为文件扩展名。 #include 可以使用两种形式来包含头文件&#xff1a; 使用双引号 (")&#xff1a; #include "CESO.h"…

【Web应用技术基础】CSS(4)——背景样式

第1题&#xff1a;背景颜色 .html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>Hello World</title><link rel"stylesheet" href"step1/CSS/style.css"> </head><body>&…

Zookeeper的系统架构

先看一张图&#xff1a; ZooKeeper 的架构图中我们需要了解和掌握的主要有&#xff1a; 1&#xff1a; ZooKeeper分为服务器端&#xff08;Server&#xff09; 和客户端&#xff08;Client&#xff09;&#xff0c;客户端可以连接到整个ZooKeeper服务的任意服务器上&#xff…

Flink on Kubernetes (flink-operator) 部署Flink

flink on k8s 官网 https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.1/docs/try-flink-kubernetes-operator/quick-start/ 我的部署脚本和官网不一样&#xff0c;有些地方官网不够详细 部署k8s集群 注意&#xff0c;按照默认配置至少有两台wo…

手机短信验证码自动转发到服务器

今天写一个自动化处理程序&#xff0c;需要验证码登录&#xff0c;怎么样把手机收到的短信自动转发到服务器接口呢&#xff1f; 利用ios手机快捷指令的功能 打开快捷指令点击中间自动化点击右上角号选择信息信息包含选取&#xff0c;输入验证码选择立即执行点击下一步按下图配…

docker run 使用 -p 命令一直显示端口被占用

解决办法 将 -p 换成 --net host 例如&#xff1a; docker run --name one-api -d --restart always -p 3000:3000 -e TZAsia/Shanghai -v /root/oneapi/data:/data justsong/one-api # 换成 docker run --name one-api -d --restart always --net host -e TZAsia/Shanghai -…

ZooKeeper 分布式锁的实现方法

如果有客户端1、客户端2等N个客户端争抢一个 Zookeeper 分布式锁。大致如下&#xff1a; 1&#xff1a; 大家都是上来直接创建一个锁节点下的一个接一个的临时有序节点 2&#xff1a; 如果自己不是第一个节点&#xff0c;就对自己上一个节点加监听器 3&#xff1a; 只要上一…

vue + LogicFlow 实现流程图展示

vue LogicFlow 实现流程图展示 1.背景 部门主要负责低代码平台&#xff0c;配置端负责配置流程图&#xff0c;引擎端负责流程执行&#xff0c;原引擎端只负责流程执行控制以及流程历史列表展示。现在提出个新的要求&#xff0c;认为仅历史记录不直观&#xff0c;需要在展示完…