vs2008中使用gdi+

1.新建一个mfc工程

2.在stdafx.h文件中加入以下几行语句:

#include <gdiplus.h>                //
#pragma comment(lib, "gdiplus.lib") //在工程属性中添加亦可
using namespace Gdiplus;            //使用GDI+的命名空间, 若不用的话每次使用Gdiplus时均加上命名空间亦可

3.修改App类

在App类(以下例子中为CTestApp)中增加成员
protected: 
    GdiplusStartupInput m_gdiplusStartupInput; 
    ULONG_PTR m_gdiplusToken;

在BOOL CTestApp::InitInstance()增加以下代码, 必须在dlg.DoModal()前.
GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);

重载CTestApp::ExitInstance()
public: 
virtual BOOL ExitInstance();

BOOL CTestApp::ExitInstance() 

    GdiplusShutdown(m_gdiplusToken); 
    return CWinAppEx::ExitInstance();    //使用基类的ExitInstance(). 
}

4. 现在可以在CTestDlg::OnPaint()中增加以下代码来画图了

CClientDC dc(this);  
Graphics graphics(dc); 
Image image(L"d:/test.jpg"); 
Point pos[] = 

    Point(10, 10), 
    Point(image.GetWidth() + 10, 10), 
    Point(10, image.GetHeight() + 10) 
}; 
graphics.DrawImage(&image, pos, 3); //在平行四边形区域内显示图像

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

*****************************************************************************************

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

在VS2008当中由于自带了GDI+的开发包,所以不需要在安装GDI开发包,这些头文件的位置由VS中的$(WindowsSdkDir)/include自动包含进来了。你可以在vs的命令提示符下使用 echo %WindowsSdkDir%显示该路径。我的电脑上是在C:/Program Files/Microsoft SDKs/Windows/v6.0A/Include。默认vs并没有将gdi的静态库链接文件加进来,所以需要显示链接,编译器指令为#pragma comment(lib, "gdiplus.lib")

下面为使用GDI+的基本代码,功能是将bmp图像转换成jpeg格式的图像。

  1. // FileTran.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #pragma comment(lib, "gdiplus.lib")
  5. using namespace Gdiplus;
  6. GdiplusStartupInput g_Gdiplus;
  7. ULONG_PTR g_pGdiToken;
  8. int GetCodecClsid(const WCHAR* format, CLSID* pClsid);
  9. int _tmain(int argc, _TCHAR* argv[])
  10. {
  11. GdiplusStartup(&g_pGdiToken, &g_Gdiplus, NULL);
  12. Bitmap* pBmp = Bitmap::FromFile(_T("你的bmp图像路径"));
  13. if (pBmp)
  14. {
  15. CLSID clsid;
  16. int nQuality = 95;
  17. EncoderParameters Encoders;
  18. Encoders.Count = 1;
  19. Encoders.Parameter[0].Guid = EncoderQuality;
  20. Encoders.Parameter[0].Type = EncoderParameterValueTypeLong;
  21. Encoders.Parameter[0].NumberOfValues = 1;
  22. Encoders.Parameter[0].Value = &nQuality;
  23. GetCodecClsid(L"image/jpeg", &clsid);
  24. pBmp->Save(L"tran.jpg", &clsid, &Encoders);
  25. }
  26. GdiplusShutdown(g_pGdiToken);
  27. return 0;
  28. }
  29. int GetCodecClsid(const WCHAR* format, CLSID* pClsid)
  30. {
  31. UINT  codenum = 0;
  32. UINT  size = 0;
  33. ImageCodecInfo* pImageCodecInfo = NULL;
  34. GetImageEncodersSize(&codenum, &size);
  35. if(size == 0)
  36. return -1 ;
  37. pImageCodecInfo = new ImageCodecInfo[size];
  38. if(pImageCodecInfo == NULL)
  39. return -1;
  40. GetImageEncoders(codenum, size, pImageCodecInfo);
  41. for(UINT j = 0; j < codenum; ++j)
  42. {
  43. if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
  44. {
  45. *pClsid = pImageCodecInfo[j].Clsid;
  46. delete []pImageCodecInfo;
  47. return 0;
  48. }
  49. }
  50. delete []pImageCodecInfo;
  51. return -1;
  52. }

vs2008中使用gdi+的设置的更多相关文章

  1. 在MFC中使用GDI+的一般方法,以VC6.0编译器为例

    1.载解压GDI+开发包: 2.正确设置include & lib 目录: 设置如下:VC6.0编译器菜单Tools->Options->Directories中添加inlude ...

  2. VS2008中开发智能设备程序的一些总结

    原文链接:http://blog.csdn.net/citybug_nj/article/details/2598705 程序中包括四个部分: 系统配置 这个部分用来配置系统中的相关参数,参数包括数据 ...

  3. 在VS2008中配置WDK7600驱动开发环境

    网上这类资料多如牛毛,也许很多人都是转来转去,却很有人去真正的测试,有时候感觉确实对他人也是一种误导. 这里是我自己在VS2008 + WDK7600.16385.0 + DDKWizard配置自己的 ...

  4. VS2008中开发手持终端程序(PDA软件)总结

    VS2008中开发手持终端程序(PDA手机软件)的项目总结 1程序结构 程序中包括四个部分: 1.系统配置 这个部分用来配置系统中的相关参数,参数包括数据库信息和串口的配置信息.这部分的主要技术是XM ...

  5. VS2008中开发智能设备程序的一些总结收藏

    结合前几日开发的<全国大坝基础数据库采集端>中的PDA程序开发过程,对VS2008开发智能设备上的程序做个小总结. 1         程序结构 程序中包括四个部分: 1. 系统配置 这个 ...

  6. ahjesus在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效

    ahjesus在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效

  7. java项目中build path的设置

    右键点击项目新建文件libs 添加jtds  jar包引用本地动态链接库(dll)的设置方法 配置LibraryJRE的添加和更换  Java项目中build path的设置总结,包括JRE的添加和更 ...

  8. iOS中UITableView的一些设置

    不可滑动: ? 1 tableView.userInteractionEnabled = NO; 也可以在storyboard中的userInteractionEnable属性设置 显示导向箭头: ? ...

  9. 【JAVA】Quartz中时间表达式的设置

    Quartz中时间表达式的设置-----corn表达式 时间格式: <!-- s m h d m w(?) y(?) -->,   分别对应: 秒>分>小时>日>月 ...

随机推荐

  1. 基于visual Studio2013解决C语言竞赛题之0525拉丁方阵

     题目

  2. 【转】关于C语言生成不重复的随机数

    一 说起随机函数,恐怕又有人说这是老生长谈了……一般很多人都形成了自己的固定格式,因为随机数用处比较大,用的时候比较多,拿过来就用了.但是新手不这么 干,他们总是抱有疑惑,我就是一个新手,而且较菜…… ...

  3. JavaScript的实现

    了解了JavaScript是干什么的< 对一些词的理解 >,下面该知道它是怎么实现的. 一个完整的JavaScript是由三部分组成的,如下图 ECMAScript 可以为不同种类的宿主环 ...

  4. iOS swift lazy loading

    Why bother lazy loading and purging pages, you ask? Well, in this example, it won't matter too much ...

  5. HDU 1432 Lining Up (POJ 1118)

    枚举,枚举点 复杂度为n^3. 还能够枚举边的,n*n*log(n). POJ 1118 要推断0退出. #include<cstdio> #include<cstring> ...

  6. Vmware虚拟机下三种网络模式配置

    VMware虚拟机有三种网络模式,分别是Bridged(桥接模式).NAT(网络地址转换模式).Host-only(主机模式). VMware workstation安装好之后会多出两个网络连接,分别 ...

  7. C# 点击窗口任意位置拖动

    代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

  8. ACM第三次比赛 Big Chocolate

    Problem G Big Chocolate Mohammad has recently visited Switzerland . As he loves his friends very muc ...

  9. javascript每日一练(六)——事件一

    一.event对象 var oEvent = ev || event;//获取事件对象 oEvent.clientX oEvent.clientY//获取鼠标坐标 oEvent.cancelBubbl ...

  10. SQL之单行函数

    单行函数语法: function name(column|expression,[arg1,arg2,...]) 参数说明: function name:函数名称 column:数据库列名 expre ...