用GDI+抓屏并存成.jpg文件

VC/MFC 使用GDI实现抓屏 抓屏的实现            最近研究了抓屏的功能,抓屏过后把图片保持成JPG图像格式,百度、Google了好一阵终于有点明白了,特此在这里写下来和大家一起分享。       微软规定程序员不能直接操作硬件,所以我们只能通过其他方式去实现,这里我理解的是硬件就是风景,我们总不能对风景直接操作吧,那我们只能把风景画下来,这样就变得可操作了,要作画我们就要准备好工具,比如纸、笔、墨等 阅读详情
#include    
#include    
#include    

using  namespace  Gdiplus;  

#pragma  comment  (lib,  "gdiplus.lib")  

GdiplusStartupInput  gdiplusStartupInput;  
ULONG_PTR                      gdiplusToken;  

int  GetEncoderClsid(LPCWSTR  format,  CLSID*  pClsid)  
{  
       UINT    num  =  0;  
       UINT    size  =  0;  

       ImageCodecInfo*  pImageCodecInfo  =  NULL;  

       GetImageEncodersSize(&num,  &size);  
       if (size  ==  0)  
               return  -1;  

       pImageCodecInfo  =  (ImageCodecInfo*)(malloc(size));  
       if (pImageCodecInfo  ==  NULL)  
               return  -1;  

       GetImageEncoders(num,  size,  pImageCodecInfo);  

       for (UINT  j  =  0;  j  <  num;  ++j)  
       {  
               if (  wcscmp(pImageCodecInfo[j].MimeType,  format)  ==  0  )  
               {  
                       *pClsid  =  pImageCodecInfo[j].Clsid;  
                       free(pImageCodecInfo);  
                       return  j;  
               }  
       }  

       free(pImageCodecInfo);  
       return  -1;  
}  
//    参数  
//            xs  =  图象x轴大小  
//            ys  =  图象y轴大小  
//            quality  =  jpeg图象质量
  

VOID        SaveCurScreenJpg(LPCWSTR  pszFileName,  int  xs,  int  ys,  int  quality)  
{  
       HWND        hwnd  =  ::GetDesktopWindow();  
       HDC          hdc  =  GetWindowDC(NULL);  
       int          x  =  GetDeviceCaps(hdc,  HORZRES);  
       int          y  =  GetDeviceCaps(hdc,  VERTRES);  
       HBITMAP  hbmp  =  ::CreateCompatibleBitmap(hdc,  x,  y),  hold;  
       HDC          hmemdc  =  ::CreateCompatibleDC(hdc);  
       hold        =  (HBITMAP)::SelectObject(hmemdc,  hbmp);  
       BitBlt(hmemdc,  0,  0,  x,  y,  hdc,  0,  0,  SRCCOPY);  
       SelectObject(hmemdc,  hold);  
       {  
               Bitmap    bit(xs,  ys),  bit2(hbmp,  NULL);  
               Graphics        g(&bit);  
               g.ScaleTransform((float)xs/x,  (float)ys/y);  
               g.DrawImage(&bit2,  0,  0);  

               CLSID                          encoderClsid;  
               EncoderParameters  encoderParameters;  

               encoderParameters.Count  =  1;  
               encoderParameters.Parameter[0].Guid  =  EncoderQuality;  
               encoderParameters.Parameter[0].Type  =  EncoderParameterValueTypeLong;  
               encoderParameters.Parameter[0].NumberOfValues  =  1;  
               encoderParameters.Parameter[0].Value  =  &quality;  

               GetEncoderClsid(L"image/jpeg",  &encoderClsid);  
               bit.Save(pszFileName,  &encoderClsid,  &encoderParameters);  
       }  
       ::DeleteObject(hbmp);  
       ::DeleteObject(hmemdc);  
       return;  
}  
int  APIENTRY  WinMain(HINSTANCE  hInstance,  
                                         HINSTANCE  hPrevInstance,  
                                         LPSTR          lpCmdLine,  
                                         int              nCmdShow)  
{  
       GdiplusStartup(&gdiplusToken,  &gdiplusStartupInput,  NULL);  
       ::SaveCurScreenJpg(L".//cap.400.300.30.jpg",  400,  300,  30);  
       ::SaveCurScreenJpg(L".//cap.800.600.100.jpg",  800,  600,  100);  
       ::SaveCurScreenJpg(L".//cap.800.600.100.jpg",  640,  480,  50);  
       GdiplusShutdown(gdiplusToken);  

       return  0;  
}
GDI+ 将BMP 32图像转换为JPG文件格式保存 注意:如果没有启动GDI +, 在lockbits 时会返回失败! 1.在stdafx.h 中加入  #define ULONG_PTR unsigned long #include using namespace Gdiplus; 2.在头文件中定义变量: ULONG_PTR        m_gdiplusToken; 3.在类初始化或启动时: 阅读详情

相关推荐

win32汇编环境,窗口程序中使用GDI+显示jpg图片

运用GDI+,窗口程序中加载显示jpg文件。

一品人家的博客 1363

VC GDI+ 窗口截图内存BMP转JPG,压缩、JPG再转IStream流,IStream流再转 BYTE

最近用到 PC远程监控,用GDI+屏幕截图内存BMP转JPG,压缩 ,JPG再转IStream流,IStream流再转BYTE,通过SOCKET 转发; /****************BMP转JPG*********用法示例************************** Bitmap newbitmap(L"d:\\d.bmp");//加载BMP const unsigned

q610098308的专栏 1735

VC实现:bmp转jpg、jpg转bmp、截屏保存jpg

<br /><br /><br /><br /> <br /> <br /> <br /> <br />1.下载(GDI+ for VC6.0 SDK)GDIPlus文件将其中的Includes和Lib中的文件拷到vc目录下的Includes和Lib文件夹中.<br />   下载地址:http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip(引用他人的)<br />2.在你将要使用GDI+的工程中,完成初始化工作:<br />在StdAfx.h中加入<br

highyyy的专栏 6986

GDI+方式截取系统屏幕

#include #include #include using namespace std; #pragma comment(lib, "gdiplus") int GetEncoderClsid(const TCHAR *format, CLSID *pClsid) { //using namespace Gdiplus; UINT num = 0;

baggiowangyu的专栏 2739

Windows 2D 绘图 (GDI, GDI+, Direct2D)

Windows 2D 绘图GDIGDI 函数GDI+GDI 和 GDI+ 的区别GDI+ 新特性Direct2D视觉效果demo GDI GDI 是 Graphics Device Interface 的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有 Windows 程序的图形输出。 在 Windows 操作系统下,绝大多数具备图形界面的应用程序都离不开 GDI...

Blueware多媒体之窗 7017

在win32汇编环境中使用GDI+显示png、jpg等图片

怎么运用GDI+,来加载PNG或JPG等非位图图像的方法。

一品人家的博客 671

使用GDI+保存带品质的JPG

<br />    由于使用CImage将图像转换成JPG后品质严重受损,如果使用第三方库程序体积会很大,所以使用GDI+是最合适的选择。下面的代码示例了将位图格式的图像转换成不同品质的JPG格式,注意在使用之前要初始化GDI+库。<br /> <br /> HRESULT SaveImage(BITMAPINFO *pbi, void *pBits, LPCTSTR pszFileName, LONG lQuality) { ASSERT(pbi!=NULL && pBits!=NULL); A

风之羽翼的专栏 2726

Qt之使用GDI实现屏幕快速抓图与缩放

一.抓取和缩放 调动Qt自带的方法抓图效率很低,在实时性要求较高的场合无法满足要求,比如说抓图并转化成视频流传输来实现屏幕共享。这里采用GDI的方法来抓图,实测在抓取整个桌面(分辨率1920*1080)并等比例缩放到(1280*720)的情况下,不含鼠标耗时40毫秒左右,含鼠标50毫秒左右,基本满足要求。 下面是测试所用电脑配置: 抓取整个桌面或指定区域实际上原理是一样的,只不过桌面是个大一点的区域,在实际应用中可用用一个带边线可缩放的透明窗体来指定这个区域,如下图所示: 1.获取区域大小 .

草上爬的博客 6303

用GDI+实现BMP位图转JPG位图(及com对象IPicture转jpg)

用GDI+实现BMP位图转JPG位图(及com对象IPicture转jpg)

天之痕 2858

利用GDIPLUS将BMP图片转化为JPG

一般在解码时刻通过YUV411或是YUV420可将码流输出图片的格式对应转化成BMP或JPG,这里由于抓拍的图片为BMP,而往FTP服务器上传的(数据库读取的)只能是JPG(文件较小),所有写了这个DEMO供参考!

GDI+实现截屏

使用GDI+实现在windforms中截屏

将EMF文件转换成JPG文件

EMF格式是在印刷工业中应用与Windows操作系统的文件格式,

numen27的专栏 9206

VB基于GDIPLUS.DLL 鼠标截图、抓屏程序.rar

VB基于GDIPLUS.DLL 鼠标截图、抓屏程序,最终把截图保存为JPG、TIFF、PNG、GIF、BMP格式,可以提前写保存为BMP的代码,因为并没有用GDI 。

VC中使用Gdi+合并jpg图片

VC中使用Gdi+合并jpg图片合并两张jpg图片为一张jpg图片,思路是先把两张图片jpg图片都转化成bmp图片,然后把两张bmp图片合并成一张bmp图片,然后是把这张bmp图片转化为jpg图片。一。jpg,bmp互相转化/*********************************format:bmp转为jpg, format为image/jpeg,jpg转为bmp,format为ima

2421

vc将屏幕上指定的区域抓屏,保存成jpg图片

vc将屏幕中间400x400的区域截屏抓图并保存到jpg文件

STM32F103电压采集proteus仿真

基于HAL库,仿真单片机型号为stm32f103R6,代码keil5。通过单片机的ADC采集功能,测量四路电压,数据经由DMA传输,并将结果通过串口输出,结果比较确,误差在0.01V左右。目前仿真采集四路比较稳定,多了会乱码。proteus版本8.11安装包链接:https://pan.baidu.com/s/1yhNKLl1lGSU9KU0tTuAxcg?pwd=dxe8提取码:dxe8项目下载地址:.

weixin_42490599的博客 4766

Windows 定时抓屏

int GetEncoderClsid(const WCHAR* format, CLSID* pClsid) { UINT num = 0; // number of image encoders UINT size = 0; // size of the image encoder array in bytes ImageCo

cay22的专栏 3255

保姆级教程:用Python+MM-Agent搭建自己的数学建模AI助手(支持GPT-4o/DeepSeek)

本文提供了一份详细的教程,教你如何使用Python和MM-Agent框架搭建数学建模AI助手,支持GPT-4o和DeepSeek-R1等LLM后端。从环境配置、HMML知识库集成到多LLM适配和建模流程实现,手把手教你构建智能建模系统,提升数学建模效率。

k6l7m8n9的博客 451

GDIPlus 显示jpg png等图片

文章目录GDIPlus1. GDI和GDI+2. MFC+GDIplus 的引入和使用方法2.1 引入GDI+库2.2 编译2.3 使用GDI+显示jpg图片 GDIPlus 1. GDI和GDI+ /* GDI (Graphics Device Interface): 含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有 Windows程序的图形输出。 ...

BambooWine's Notes 2612

免Root抓包神器Packet Capture:安卓App数据捕获全攻略

本文详细介绍了免Root安卓抓包神器Packet Capture的安装与使用全攻略。通过利用安卓系统的VPN Service API,该工具无需Root权限即可捕获并解密App的HTTP/HTTPS网络流量。文章从核心原理、证书安装、实战抓包步骤到结果分析与常见问题排查,提供了完整指南,是移动端开发、安全测试和数据分析的实用利器。

weixin_29232507的博客 1072

爬虫不宕机!2026自愈式爬虫开发(Python+AI自动应对页面改版)

传统爬虫最大的痛点是"页面一改就宕机":前端布局调整、CSS选择器失效、数据结构变化,都会导致爬虫瘫痪,需要人工逐行修改代码。2026年,基于AI的自愈式爬虫成为行业标配:通过大模型自动识别页面结构变化、适配新的元素定位规则、修复数据提取逻辑,实现"页面改版不宕机,AI自动自愈"的企业级效果。本文从零讲解如何用Python+AI构建自愈式爬虫,聚焦页面改版自适应、故障自动修复、规则动态更新三大核心能力,附带可直接落地的生产级代码。问题场景解决方案LLM生成规则格式错误。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1215

MFC使用GDI+来加载PNG,JPG格式的图片

MFC使用GDI绘图

weixin_45144862的博客 1327

【人工智能之深度学习】21. 自动驾驶感知实战:YOLOv4复杂天气优化方案(BDD100K全代码+效果对比)

摘要:自动驾驶摄像头在雨雾天气下易受图像模糊、目标遮挡影响,导致YOLOv4检测精度骤降。本文基于BDD100K公开数据集(含多天气场景),设计三阶段优化方案:1)物理建模生成雨雾效果(雨滴线条+大气散射模型),将恶劣天气样本占比从20%提升至40%;2)在YOLOv4颈部嵌入CBAM注意力机制,强化模糊区域特征提取;3)L1剪枝(30%)+TensorRT量化实现轻量化。需特别说明:本文为教学虚拟案例,不可直接用于车载部署,实际落地需结合多传感器融合与ISO 26262认证。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1681
上一篇: 杀毒软件的奥秘
下一篇: 通过游戏的地图介绍GDI+
xmlscript
博客等级 码龄25年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值