C++处理图片方法之GDI+

       最近要做一个C++简单的jpg处理的函数功能,由于用在服务端,不能引入MFC的东西,于是就用上了GDI+,用它的做一些基本的图像处理和绘图基本上还是很简单的,毕竟是微软的亲儿子。

  1. 如果你使用的是VC++ 6.0你需要去网上下载一个GDI+,如果是VS2008及以上就不需要了,VS2005没有用过,大概也不需要另外下的;

  2. 在项目中引入GDI+。
    添加头文件和lib的引用,在stdahx.h加入如下的代码:

#include <GdiPlus.h>
#pragma comment(lib, "Gdiplus.lib")

如果你不想在每次调用函数加上命名空间,最好加上下面这句话:

using namespace Gdiplus
  1. 初始化GDI+,最开始不知道在使用GDI+是还要初始化,知道有一天我写的那个demo在某些电脑上运行不了,才查资料说是在调用GDI+之前要进行初始化。当然为了保险起见,我们还是初始化吧。首先我们定义两个变量,注意这两个变量不要是局部变量,因为我们在销毁的时候还要用到的。
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;

然后在程序最开始的地方GdiplusStartup初始化它。

GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

这样我们就能调用GDI+函数了。

  1. 用初始化,当然有注销啊。我们在程序退出的时候调用GdiplusShutdown注销GDI+。
GdiplusShutdown(gdiplusToken);
  1. 实例如下:
void GetBitmapInfo(char* filePath, UINT& nWidth, UINT& nHeight)
{
	ULONG_PTR gdiplusToken = NULL;
	
	Gdiplus::GdiplusStartupInput gdiplusStartupInput;
	Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);


	Gdiplus::Bitmap* pBitmap = NULL;
	pBitmap = ::new Gdiplus::Bitmap(CT2CW(filePath.GetBuffer(0)));
	filePath.ReleaseBuffer();

	if (Gdiplus::Ok != pBitmap->GetLastStatus())
	{
		::delete pBitmap;
		pBitmap = NULL;
	}

	if (pBitmap)
	{
		nWidth = pBitmap->GetWidth();
		nHeight = pBitmap->GetHeight();
	}
}
发布了58 篇原创文章 · 获赞 42 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/m0_37251750/article/details/102571248
今日推荐