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. Jekyll搭建过程详解

    原先博客用Jekyll搭建在Github上,近来访问缓慢,而且markdown不太方便写,故决定在博客园安个新家. 文章见Github博客: 搭建过程:http://wuxichen.github.i ...

  2. AsyncTask简单入门

    关系: java.lang.Object    ↳    android.os.AsyncTask<Params, Progress, Result> 概述: AsyncTask是Andr ...

  3. Python获取当地的天气和随意城市的天气

    先从中国天气网得到数据('http://www.weather.com.cn/data/cityinfo/'+城市编码),每一个城市都有各自的编码,怎样得到用户所在地的城市编码呢?用一个网页就是专门干 ...

  4. C#后台代码编写图片地址Properties.Resources._1;

    if (i == 0)            {                pictureBox1.Image = Properties.Resources._1;                ...

  5. 【CSDN博客之星评选】我为什么坚持写博客

    今天无意中在CSDN的博客之星评选活动看到自己竟然是候选人之一,真的是十分的惊讶也十分的高兴.对于喜欢写东西.喜欢分享的我来说,已经忍不住用文字来记录一下今天的美好心情,同时也让我回想起我是如何开始在 ...

  6. java--内部类访问final成员

    局部类只能访问外包方法中的final成员.位于方法内部的局部类,可以访问局部类之外,外包方法之内的所以变量和方法,但是生命周期不同,延长生命周期的办法就是将变量设置为final类型. 1)从程序设计语 ...

  7. jquery ajax调用返回json格式数据处理

    Ajax请求默认的都是异步的 如果想同步 async设置为false就可以(默认是true) var html = $.ajax({ url: "some.php", async: ...

  8. Haxe UI框架StablexUI的使用备忘与心得(序)

    最近在手上的项目开发中,从原来的使用Sprite全手写UI,开始逐步使用StablexUI,感觉还是相当不错的,强大.高效.轻量.灵活,非常适应我当前的实际需求. 不过作为小种语言的一个小众第三方开源 ...

  9. Java I/O流-PipedInputStream、PipedOutputStream

    一.整体代码图 PipedStreamDemo.java import java.io.*; class PipedStreamDemo { public static void main(Strin ...

  10. POJ 3090 Visible Lattice Points 欧拉函数

    链接:http://poj.org/problem?id=3090 题意:在坐标系中,从横纵坐标 0 ≤ x, y ≤ N中的点中选择点,而且这些点与(0,0)的连点不经过其它的点. 思路:显而易见, ...