vs2008中使用gdi+的设置

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格式的图像。

 

[cpp:showcolumns] view plaincopy

 

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

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

 

 

 

时间: 2024-08-01 16:30:11

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

vs2008中按ctrl+F5没有反应,有谁知道怎么设置吗?

问题描述 vs2008中按ctrl+F5没有反应,有谁知道怎么设置吗? 解决方案 解决方案二:没有设置吧......你重新建个页面看下....解决方案三:这个问题我今天也遇到了之前用了好久的VS2008但是今天开的时候竟然要初始配置我很纳闷然后就是发现Ctrl+F5没有了被H取代了怎么办?解决方案四:利用重置(还原)的功能,重置VS的快捷键1.点击菜单Tools->Options2.选择Options弹出Form中的Environment->Keyboard3.点击Reset还原键.大功告成!

Visual C++程序设计中Windows GDI贴图闪烁的解决方法_C 语言

本文实例讲述了Visual C++程序设计中Windows GDI贴图闪烁的解决方法.分享给大家供大家参考.具体如下: 一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁. 先来谈谈闪烁产生的原因 原因一: 如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕 上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期. 一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的. 这样

求助。现在在VS2008中c# 怎么能实时显示时间

问题描述 求助.现在在VS2008中c#怎么能实时显示时间 解决方案 解决方案二:timer设置间隔500毫秒实时读取DateTime.Now.ToString("yyyy-MM-ddhh:mm:ss");解决方案三:我是初学者....求精讲解决方案四:引用2楼的回复: 我是初学者....求精讲 你要什么效果的实时?解决方案五:恩恩.是的.....解决方案六:引用3楼的回复: 引用2楼的回复:我是初学者....求精讲你要什么效果的实时? 就是要实时显示时间解决方案七:求助.......

vs2008中自动更新silverlight包

问题描述 vs2008中自动更新silverlight包 在web项目属性中,我设置了silverlight应用程序但是无法跟进到clienbin中,每次要到silverlight文件夹中去复制,并且黏贴到web项目中clienbin文件夹下,不知道是VS中的设置问题,还是.....

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

  原文链接:http://blog.csdn.net/citybug_nj/article/details/2598705 程序中包括四个部分: 系统配置 这个部分用来配置系统中的相关参数,参数包括数据库信息和串口的配置信息.这部分的主要技术是XML文件的读取和写入. 数据下载 从数据库中下载数据到PDA,PDA上的保存也是使用数据库.这部分的技术主要是PDA设备上的移动数据库开发和使及用PDA连接PC数据库 数据上传 把PDA上的数据上传到PC数据库中,使用的技术和2相同. GPS数据获取

浏览器缓存-在 HTTP 标头中为静态资源设置过期日期或最长存在时间

问题描述 在 HTTP 标头中为静态资源设置过期日期或最长存在时间 用gogole的优化工具检测出 "在 HTTP 标头中为静态资源设置过期日期或最长存在时间,可指示浏览器从本地磁盘中加载以前下载的资源,而不是通过网络加载." 请问需要在IIS怎么配置,求详细步骤. 平台是 windows2008+iis7.5 解决方案 Image and Flash content Caching for One Month Header set Cache-Control "max-ag

在vs2008中使用AJAX开发.net 2.0下的Web程序的方法

先安装asp.net ajax extensions 此功能是提供.net 2.0 开发AJAX的Client-Side功能 接下来安装Microsoft ASP.NET 2.0 AJAX Templates for Visual Studio 2008 模板套件 这样就可以在vs2008中选择AJAX模板但是必须修改web.config的设定 指定特定的组件版本 最简单的方法是新建一个AJAX 页面 然后复制web.config内容跟旧页面对比 没有的添加上 有的覆盖掉. 加入以下设定复制代码

Asp.net中使用GDI+繪製圖形

asp.net Asp.net中使用GDI+繪製圖形 GDI+ --下一代圖形設備接口 所有的圖形用戶界面(GUI)應用程序都與硬件設備(顯示器,打印機,掃描儀)進行交互,這可以表示為可讀的數據.不過應用程序並不直接和設備之間進行通信,否則必須為每台設備分別編寫 不同的用戶接口代碼.為了避免這種重復的工作,我們可以在應用程序和設備之間使用第三個組件,此組件將轉換和傳送發送到設備的數據,以及設備發送到程序的數據.而這個組件就是GDI+.GDI+是.NET Framework中與圖形設備進行交互的入

.NET Framework 4中的时间间隔格式设置和分析

在 Microsoft .NET Framework 4 中,TimeSpan 结构通过增加格式设置和分析支持得到改进,这种支 持可与 DateTime 值的格式设置和分析支持相媲美.在本文中,我将探讨新增的格式设置和分析功能,并 提供 TimeSpan 值使用方面的一些实用提示. .NET Framework 3.5 及更早版本中的格式设置 在 Microsoft .NET Framework 3.5 及更早版本中,用于时间间隔的唯一格式设置方法是无参数 TimeSpan.ToString 方