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. Regionals 2012, Asia - Jakarta 解题报告

    啥都不会做了.. 做题慢死 A.Grandpa's Walk 签到题. 直接DFS就行. 注意先判断这个点可以作为一个路径的起点不. 然后再DFS. 否则处理起来略麻烦 #include <io ...

  2. UVA 10603 Fill(正确代码尽管非常搓,网上很多代码都不能AC)

    题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=1544">click here~ ...

  3. Hadoop HDFS (3) JAVA訪问HDFS之二 文件分布式读写策略

    先把上节未完毕的部分补全,再剖析一下HDFS读写文件的内部原理 列举文件 FileSystem(org.apache.hadoop.fs.FileSystem)的listStatus()方法能够列出一 ...

  4. sublime2 c++的一些使用配置

    1 下载安装好tdw gcc后,配置好环境变量后,配置sublime2. tools->build system-> new build system... 里面输入: { "c ...

  5. TFT ST7735的Netduino驱动

    好久没写关于netduino的文章了,工作忙是一方面,主要原因还是因为没解决TFT显示的问题,功夫不负有心人,在经过多轮研究后,总算在今天2013年12月15日的晚上9点解决了. 下面先介绍一下我所用 ...

  6. aop编程 环绕round

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  7. Linux下Nginx+tomcat应用系统性能优化

    软件环境及服务器配置如下: Linux rh6.3,Tomcat7.0.29,Nginx1.2.7 mysql5.1,jdk1.6.0 mysql5.1 memcached 1.4.15 Xeno 2 ...

  8. Qt 智能指针学习(7种QT智能指针和4种std智能指针)

    从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ #include <QApplication> #include <QLabel> int main(int arg ...

  9. Android studio gradle配置

    什么是Gradle? Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. gr ...

  10. json datetime转换问题

    我用Newtonsoft.Json.dll转换成json,这次是把一个集合转换成json,这个集合里有个DateTime类型的数据,转换完成后会变成/Date(1286375605000+0800)/ ...