最近要做一个C++简单的jpg处理的函数功能,由于用在服务端,不能引入MFC的东西,于是就用上了GDI+,用它的做一些基本的图像处理和绘图基本上还是很简单的,毕竟是微软的亲儿子。
-
如果你使用的是VC++ 6.0你需要去网上下载一个GDI+,如果是VS2008及以上就不需要了,VS2005没有用过,大概也不需要另外下的;
-
在项目中引入GDI+。
添加头文件和lib的引用,在stdahx.h加入如下的代码:
#include <GdiPlus.h>
#pragma comment(lib, "Gdiplus.lib")
如果你不想在每次调用函数加上命名空间,最好加上下面这句话:
using namespace Gdiplus
- 初始化GDI+,最开始不知道在使用GDI+是还要初始化,知道有一天我写的那个demo在某些电脑上运行不了,才查资料说是在调用GDI+之前要进行初始化。当然为了保险起见,我们还是初始化吧。首先我们定义两个变量,注意这两个变量不要是局部变量,因为我们在销毁的时候还要用到的。
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
然后在程序最开始的地方GdiplusStartup初始化它。
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
这样我们就能调用GDI+函数了。
- 用初始化,当然有注销啊。我们在程序退出的时候调用GdiplusShutdown注销GDI+。
GdiplusShutdown(gdiplusToken);
- 实例如下:
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();
}
}