VC 6.0 使用GDI+类库进行图片处理

读取图片长款的两种方法:

1.使用IPicture类读取图片

        IStream         *pStm;      
	CFileStatus   fstatus;      
	CFile             file;      
	LONG           cb;      
	LPVOID        pvData=NULL;      
	HGLOBAL      hGlobal;  
	long hr;

	if(file.Open(picName,CFile::modeRead)&&file.GetStatus(picName,fstatus)&&((cb=fstatus.m_size)!=-1))      
	{      
		hGlobal=GlobalAlloc(GMEM_MOVEABLE,cb);      

		if(hGlobal!=NULL)      
		{      
		   if((pvData=GlobalLock(hGlobal))!=NULL)      
		   {      
			file.ReadHuge(pvData,cb);      
			GlobalUnlock(hGlobal);      
			hr = CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);      
		   }    
		}    
	}else{
		return IMA_NOTFOUND;
	}
        IPicture *pPic; 
	hr = OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic);
	if(SUCCEEDED(hr))    
	{  
		OLE_XSIZE_HIMETRIC   hmWidth=0;      
		OLE_YSIZE_HIMETRIC   hmHeight=0;      

		pPic->get_Width(&hmWidth);      
		pPic->get_Height(&hmHeight);      
		CDC *p=CDC::FromHandle(::GetDC(NULL));  

		int lWidthPixels=MulDiv(hmWidth,p->GetDeviceCaps(LOGPIXELSX),2540);  
		int lHeightPixels=MulDiv(hmHeight,p->GetDeviceCaps(LOGPIXELSY),2540);  
 
		if( lHeightPixels != 672 || lWidthPixels != 1050)
		{
			file.Close();
			GlobalFree(hGlobal);
			return IMA_PIXEL_ERROR;
		}
		
	}else{
		GlobalFree(hGlobal);
		file.Close();
		return IMA_LOADERROR;
	}
	
	file.Close();
	GlobalFree(hGlobal);
	return IMA_OK;

2. 使用GDI+类库

下载GDI+类库,在VC6.0的环境中点击Tools->Options...->Directories标签,在Include files下选择GDI+中的include文件夹,在library files下选择GDI+中的lib文件夹

                 

typedef unsigned __int32 ULONG_PTR;
#include <gdiplus.h>
using namespace Gdiplus; 
#pragma comment(lib, "gdiplus.lib")
    CFileFind   find;  
    if (!find.FindFile(picName))
    {
        find.Close();
        return IMA_NOTFOUND;
    }
    find.Close();

    //init GDI
	Gdiplus::GdiplusStartupInput gdiplusStartupInput;
	ULONG_PTR  gdiplusToken;
	GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

	Image * psrcImg=NULL;   
    psrcImg = Image::FromFile(picName);

	if (!psrcImg || psrcImg->GetLastStatus() != Ok)
    {
        return IMA_LOADERROR;
    }

    int   lWidthPixels=psrcImg->GetWidth();   
    int   lHeightPixels=psrcImg->GetHeight(); 
	if( lHeightPixels != 672 || lWidthPixels != 1050)
	{

		return IMA_PIXEL_ERROR;
	}
	return IMA_OK;



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值