最近学校作业要处理图片,本来是要使用openCV的,但之前一直学的win32编程(mfc不习惯)(一直看的比较老的那本经典的《Windows程序设计》Charles Petzold著),并且对API的要求只是打开图片,给我像素矩阵就行,剩下 的要自己写,windows自带的API应该能搞定吧,之前也学过GDI,但都是画线什么的,顶多是打开BMP图片,而我要处理的有jpg格式的,就在网上搜吧,果然有GDI+,支持这种格式,那就开始吧。
中间的过程废话就不说了,走过不少弯路。
首先需要进行配置,看了网上的教程,有VC6.0和VS的,之前一直在用VC6.0,但VC6出的时候GDI+还没有出生的,GDI+还是在VC7的时候(不知道对不对,没见过这个版本)配置较麻烦,看到还需要下载用到的dll跟文件,作业还催着的,那我就换用VS吧,反正感觉又差不了多少。感觉最简单的一种方法就是直接在程序开始加上这几句。
程序中每句话的作用就不具体解释了,光捡重要的说吧,各位有兴趣可以自己查,这个简单多了。
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")
然后就可以正常使用GDI+了。
但还有一项十分重要的工作,那就是初始化GDI+,代码如下:
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
然后在程序结束之前,需要关闭GDI+,使用下面的语句
GdiplusShutdown(gdiplusToken);
下面讲到重点了:这一切做完之后,按理应该做自己想做的了,但只要一打开图片,获取得到 的状态就是OutOfMemory。
Image* image = new Image(L"2.jpg");
Status st = image->GetLastStatus();
<