GDIplus的初次接触--加载并显示常用格式图片

来源:互联网 发布:程序员招聘要求英文 编辑:程序博客网 时间:2024/05/21 23:31
 在没有接触Gdiplus之前,在vc中绘制图片,通常加载一张位图,然后进行贴图。对于现在多种多样的图片格式,之前的GDI并不支持(应该是这样的,呵呵)。而使用Gdiplus则可以选择多种图片格式,比如BMP, ICON, GIF, JPEG, Exif, PNG, TIFF, WMF, and EMF。

下面就介绍下首次接触Gdiplus的一个简单应用。

一、包括相应的头文件及引入相应的lib

[cpp] view plain copy
  1. #include <GdiPlus.h>  
  2. //#include <AtlImage.h> //此头文件里面包括#pragma comment(lib, "gdiplus.lib")  
  3. #pragma comment(lib, "gdiplus.lib")  
  4. using namespace Gdiplus;  

二、初始化Gdiplus

[cpp] view plain copy
  1. Gdiplus::GdiplusStartupInput m_gdiplusStartupInput;  
  2. ULONG_PTR m_gdiplusToken;   
  3. GdiplusStartup( &m_gdiplusToken, &m_gdiplusStartupInput, NULL );  


三、加载相应的资源(此处为图片)

[cpp] view plain copy
  1. Image*      m_pImage;                           //图片对象  
  2. m_pImage=Image::FromFile(_T("Test03.jpg"));  
  3.   
  4. //错误判断  
  5. if ((m_pImage==NULL)||(m_pImage->GetLastStatus()!=Ok))   
  6. {  
  7.     if ( m_pImage )  
  8.     {  
  9.         delete m_pImage;  
  10.         m_pImage = NULL;  
  11.     }  
  12.     return FALSE;  
  13. }  



四、绘制图片

[cpp] view plain copy
  1. Graphics graphics( GetDC()->GetSafeHdc() );   
  2. graphics.DrawImage(m_pImage, 0,0,m_pImage->GetWidth(),m_pImage->GetWidth());   


五、关闭Gdiplus

[cpp] view plain copy
  1. GdiplusShutdown( m_gdiplusToken );  


以下是显示一个jpg格式的例子(基于对话框的一个程序)
一、主要代码

[cpp] view plain copy
  1. //变量声明  
  2. Gdiplus::GdiplusStartupInput    m_gdiplusStartupInput;  
  3. ULONG_PTR                       m_gdiplusToken;  
  4. Image*                          m_pImage;                           //图片对象  
  5.   
  6. //初始化  
  7. BOOL Cmfc12_30Dlg::OnInitDialog()  
  8. {  
  9.   
  10.     // TODO: 在此添加额外的初始化代码  
  11.     //初始化GDI+.  
  12.     GdiplusStartup( &m_gdiplusToken, &m_gdiplusStartupInput, NULL );  
  13.   
  14.     //加载文件  
  15.     //CT2CW strFileName( _T("I:\\编程练习\\CommonFiles\\Test02.png") );  
  16.     //m_pImage = new Image( _T("I:\\编程练习\\CommonFiles\\Test02.png") );  
  17.     //m_pImage=Image::FromFile(_T("I:\\编程练习\\CommonFiles\\Test02.png"));  
  18.     m_pImage=Image::FromFile(_T("I:\\编程练习\\CommonFiles\\Test03.jpg"));  
  19.   
  20.     //错误判断  
  21.     if ((m_pImage==NULL)||(m_pImage->GetLastStatus()!=Ok))   
  22.     {  
  23.         if ( m_pImage )  
  24.         {  
  25.             delete m_pImage;  
  26.             m_pImage = NULL;  
  27.         }  
  28.         return FALSE;  
  29.     }  
  30.   
  31.     MoveWindow( 0, 0, 1024, 768 );  
  32.   
  33.     //设置按钮位置  
  34.     CWnd* pBtn = GetDlgItem( IDOK );  
  35.     if ( pBtn )  
  36.     {  
  37.         pBtn->MoveWindow( 1024-160, 700, 60, 30 );  
  38.     }  
  39.     pBtn = GetDlgItem( IDCANCEL );  
  40.     if( pBtn )  
  41.     {  
  42.         pBtn->MoveWindow( 1024-80, 700, 60, 30 );  
  43.     }  
  44.     CenterWindow();  
  45.   
  46.     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE  
  47. }   
  48.   
  49.   
  50. //绘制  
  51. void Cmfc12_30Dlg::OnPaint()  
  52. {  
  53.   
  54.     //GetDC()->PatBlt( 0, 0, 500, 500, BLACKNESS );  
  55.     //PatBlt( GetDC()->GetSafeHdc(), 0, 0, 500, 500, BLACKNESS );  
  56.   
  57.     Graphics graphics( GetDC()->GetSafeHdc() );   
  58.     graphics.DrawImage(m_pImage, 0,0,m_pImage->GetWidth(),m_pImage->GetWidth());  
  59. }  
  60.   
  61.   
  62. //关闭  
  63. void Cmfc12_30Dlg::OnDestroy()  
  64. {  
  65.     CDialog::OnDestroy();  
  66.   
  67.     // TODO: 在此处添加消息处理程序代码  
  68.     if( m_pImage )  
  69.     {  
  70.         try  
  71.         {  
  72.             delete m_pImage;  
  73.         }  
  74.         catch (...)  
  75.         {  
  76.   
  77.         }  
  78.         m_pImage = NULL;  
  79.     }  
  80.   
  81.     GdiplusShutdown( m_gdiplusToken );  
  82. }    



二、运行界面 

原创粉丝点击