• GDI+使用小记


    1.初始化:

    #include <GdiPlus.h>
    using namespace Gdiplus; 
    #pragma comment(lib,"gdiplus.lib")

     GdiplusStartupInput gdiplusStartupInput;
    	GdiplusStartup(&Gdi_token, &gdiplusStartupInput, NULL) ;
    

      GdiplusShutdown(Gdi_token);

    2.使用:
    先贴几个简单的例子:

    绝对路径:

    		    Image image(TEXT("D:\\Program Files\\vs2005_Project\\test\\test\\res\\未标题-1.png"));
    			CPaintDC dc(this);
    			Graphics g(dc) ;
    			g.DrawImage(&image,0,0,image.GetWidth(),image.GetHeight());


    不要写Image img;这样会报错:error C2248: “Gdiplus::Image::Image”: 无法访问 protected 成员(在“Gdiplus::Image”类中声明)

    相对路径:
      

    BOOL LoadResImage(int nResID,Image * &lpImage,LPCTSTR lpType = TEXT("PNG"));
    BOOL LoadResImage(int nResID,Image * &lpImage, LPCTSTR lpType)
    {
    	HINSTANCE hIns=AfxGetInstanceHandle();
    	HRSRC hRsrc = ::FindResource (hIns,MAKEINTRESOURCE(nResID),lpType); // type 
    	if (!hRsrc) 
    		return FALSE; 
    	// load resource into memory 
    	DWORD len = SizeofResource(hIns, hRsrc); 
    	BYTE* lpRsrc = (BYTE*)LoadResource(hIns, hRsrc); 
    	if (!lpRsrc) 
    		return FALSE; 
    	// Allocate global memory on which to create stream 
    	HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len); 
    	//HGLOBAL m_hMem = GlobalAlloc(GHND, len); 
    //=======================================================
    //GMEM_FIXED:分配固定的内存
    //GMEM_MOVEABLE:分配可移动的内存,不能与 GMEM_FIXED 组合使用
    //GMEM_ZEROINIT:将所申请内存初始化为0.
    //=======================================================
    	BYTE* pmem = (BYTE*)GlobalLock(m_hMem); 
    	memcpy(pmem,lpRsrc,len); 
    	IStream* pstm; 
    	HRESULT ht =  CreateStreamOnHGlobal(m_hMem,FALSE,&pstm); 
    	if (ht != S_OK)
    	{
    		GlobalFree(m_hMem);
    		return FALSE ;
    	}
    	// load from stream 
    	lpImage=Gdiplus::Image::FromStream(pstm); 
    	// free/release stuff 
    	GlobalUnlock(m_hMem); 
    	pstm->Release(); 
    	FreeResource(lpRsrc);
             GlobalFree(m_hMem);return TRUE ;
    }

    调用:
    Image *pimage;
                //BOOL result  = LoadResImage(IDR_JPG1,pimage,TEXT("JPG")) ;
    			BOOL result  = LoadResImage(IDB_PNG1,pimage,TEXT("PNG")) ;
    			if (result)
    			{
    				CPaintDC dc(this);
    				Graphics g(dc) ;
    				g.DrawImage(pimage,0,0,pimage->GetWidth(),pimage->GetHeight());
    			}

    小知识:要用PS创建背景透明的PNG,直接把背景删了,保存。同样,上面例子画出来的PNG透明部分会把底色透出来


    3.判断Image对象的类型:
    简单说明例子:

    	                        GUID formatID;
    				pimage->GetRawFormat(&formatID);
    				int m_nImgFormat;
    				enum IMGFORMAT { if_bmp, if_jpg, if_png, if_gif, if_tiff, if_error };
    				if (formatID == Gdiplus::ImageFormatBMP)
    				{
    					m_nImgFormat = if_bmp;
    				}
    				if (formatID == Gdiplus::ImageFormatJPEG)
    				{
    					m_nImgFormat = if_jpg;
    				}
    				if (formatID == Gdiplus::ImageFormatPNG)
    				{
    					m_nImgFormat = if_png;
    				}
    				if (formatID == Gdiplus::ImageFormatGIF)
    				{
    					m_nImgFormat = if_gif;
    				}
    				if (formatID == Gdiplus::ImageFormatTIFF)
    				{
    					m_nImgFormat = if_tiff;
    				}


  • 相关阅读:
    今天开始用 VSU 2010
    Visual Studio 2010 模型设计工具 基本应用
    Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程
    Enterprise Library 4.1 Security Block 快速使用图文笔记
    解决“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。”(图)
    一个Oracle存储过程示例
    Enterprise Library 4.1 Application Settings 快速使用图文笔记
    Oracle 10g for Windows 简体中文版的安装过程
    Oracle 11g for Windows 简体中文版的安装过程
    Oracle 9i 数据库 创建数据库 Net 配置 创建表 SQL查询 创建存储过程 (图)
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693621.html
Copyright © 2020-2023  润新知