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

转载 2004年11月03日 12:07:00
#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+截屏

GDI+截屏
  • lcalqf
  • lcalqf
  • 2014年12月30日 17:51
  • 2963

GDI+屏幕截图(二)

上一篇讲了如何写一个很low的截屏工具,这次进行稍微美化,对未选择区域的图片加上透明度,效果如下图。   主要用到的的代码如下: /// 设置图片的透明度 //...
  • q317379184
  • q317379184
  • 2015年08月25日 16:26
  • 1130

tcpdump网络抓包工具

tcpdump网络抓包工具__tcpdump(-X、-i eth0、"tcp and src host dst port")和sniffit__网络开发,非常重要...
  • okkeqin
  • okkeqin
  • 2014年06月18日 12:53
  • 470

GDI+ BMP转JPG

自己封装的一个函数: /** @name Bmp2Jpg @brief BMP转JPG @param[in] PBYTE pbBmp @param[in] ...
  • friendan
  • friendan
  • 2014年12月26日 13:54
  • 2385

用gdi 实现屏幕截图功能

最近在工作中要实现一个截图的gon
  • u010442009
  • u010442009
  • 2014年09月18日 10:47
  • 2080

GDI+ 读取jpg图片每个像素的值

// 读取jpg图像像素rgb值.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include #include...
  • wangyaninglm
  • wangyaninglm
  • 2014年12月11日 16:30
  • 4618

视频流截屏

直播项目中,截取当前的视频手机画面分享主播,支持android5.0以上手机。 调用方法,其中mRl是布局父控件, private String TAG = "TAG"; private M...
  • chengxiuhong1
  • chengxiuhong1
  • 2017年06月09日 14:24
  • 177

WINDOWS抓屏的各种方法

原文地址:http://www.cnblogs.com/fence/archive/2010/01/18/1651100.html 转载请注明原地址,这样自己也便于记录,别人读的也方便。---jia...
  • jia_zhengshen
  • jia_zhengshen
  • 2013年07月19日 17:50
  • 2640

VS2013 GDI+显示jpg

Image image(_T("d:\\1.jpg")); CWnd* pwnd = GetDlgItem(IDC_PIC); CDC* dc = pwnd->GetDC(); CRect rect;...
  • a379039233
  • a379039233
  • 2015年07月09日 10:20
  • 1097

HBITMAP 保存为JPG格式

  HBITMAP 保存为JPG格式http://blog.csdn.net/qq7183316/archive/2011/05/17/6425887.aspx// 下载了ijl库,看了看说明文档和例...
  • ding_net
  • ding_net
  • 2011年06月21日 10:03
  • 1383
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用GDI+抓屏并存成.jpg文件
举报原因:
原因补充:

(最多只允许输入30个字)