首页 > 编程语言 > c/c++ > [VC]缩放图片
2014
03-19

[VC]缩放图片

在对缩放精度要求不高的情况下,可以使用GetThumbnailImage比较轻松的获取图片缩略图,参考自:http://bbs.aau.cn/forum.php?mod=viewthread&tid=7277

头文件:

#include <atlconv.h>
#include <AtlBase.h>
#include <tchar.h>
#include "gdiplus.h" 
#include <GdiPlusGraphics.h>
using namespace Gdiplus; 
#pragma comment(lib, "gdiplus.lib")

CPP:

int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
	UINT  num = 0;          // number of image encoders
	UINT  size = 0;         // size of the image encoder array in bytes

	ImageCodecInfo* pImageCodecInfo = NULL;

	GetImageEncodersSize(&num, &size);
	if(size == 0)
		return -1;  // Failure

	pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
	if(pImageCodecInfo == NULL)
		return -1;  // Failure

	GetImageEncoders(num, size, pImageCodecInfo);

	for(UINT j = 0; j < num; ++j)
	{
		if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
		{
			*pClsid = pImageCodecInfo[j].Clsid;
			free(pImageCodecInfo);
			return j;  // Success
		}    
	}

	free(pImageCodecInfo);
	return -1;  // Failure
}

void DrawMainWindow(Image* img,int w,int h)
{
	HDC hDC = GetDC(AfxGetMainWnd()->m_hWnd);
	if (hDC)
	{
		Graphics graphics(hDC);
		graphics.DrawImage(img,w,h,img->GetWidth(),img->GetHeight());
		ReleaseDC(AfxGetMainWnd()->m_hWnd,hDC);
	}

}

void GetThumbnail(LPCSTR srcFile,LPCSTR dstFile,int width,int height,bool constRatio)
{
	GdiplusStartupInput gdiplusStartupInput;
	ULONG_PTR gdiplusToken;
	GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
	
	USES_CONVERSION;
	Image srcImage(A2W(srcFile));
	Image *dstImage;

	int srcWidth = srcImage.GetWidth();
	int srcHeight = srcImage.GetHeight();

	if( constRatio ){
		if ( width / srcWidth < height / srcHeight ) {
			height = width * srcHeight / srcWidth;
		}
		else {
			width = height * srcWidth / srcHeight;
		}
	}
	dstImage = srcImage.GetThumbnailImage(width,height);
	
	CLSID imgClsid;
	GetEncoderClsid(L"image/jpeg",&imgClsid);
	dstImage->Save(A2W(dstFile),&imgClsid,NULL);
	
	DrawMainWindow(&srcImage,0,0);
	DrawMainWindow(dstImage,0,srcImage.GetHeight()+10);
	delete dstImage;
	dstImage = NULL;

	//GdiplusShutdown(gdiplusToken);
}

使用方法:

GetThumbnail("image.jpg","cc.jpg",200,80,TRUE);

ImageZoom

最后编辑:
作者:NINE
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。