我直接来全套把,不然很多新手不知道怎么弄
1、首先下载FreeImage3160Win32.zip版本有可能不同,链接赏给你:下载地址点击打开链接
2、打开找到FreeImage.dll FreeImage.lib, FreeImage.h拷贝到项目中去。
3、开始使用在cpp中导入静态库
#include "FreeImage.h"
#pragma comment(lib,"FreeImage.lib")
下面的转化代码我就拷贝一个他人的了,嘻嘻。节约时间
IplImage* gif2ipl(const char* filename)
{
FreeImage_Initialise(); //load the FreeImage function lib
FREE_IMAGE_FORMAT fif = FIF_GIF;
FIBITMAP* fiBmp = FreeImage_Load(fif, filename, GIF_DEFAULT);
FIMULTIBITMAP * pGIF = FreeImage_OpenMultiBitmap(fif, filename, 0, 1, 0, GIF_PLAYBACK);
// FIBITMAPINFO fiBmpInfo = getfiBmpInfo(fiBmp);
int gifImgCnt = FreeImage_GetPageCount(pGIF);
FIBITMAP * pFrame;
int width, height;
width = FreeImage_GetWidth(fiBmp);
height = FreeImage_GetHeight(fiBmp);
IplImage * iplImg = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
iplImg->origin = 1;//should set to 1-top-left structure(Windows bitmap style)
RGBQUAD* ptrPalette = new RGBQUAD; // = FreeImage_GetPalette(fiBmp);
BYTE intens;
BYTE* pIntensity = &intens;
cvNamedWindow("gif", 0);
printf("gifImgCnt %d \n", gifImgCnt);
for (int curFrame = 0; curFrame < gifImgCnt; curFrame++)
{
pFrame = FreeImage_LockPage(pGIF, curFrame);
//ptrPalette = FreeImage_GetPalette(pFrame);
char * ptrImgDataPerLine;
for (int i = 0; i < height; i++)
{
ptrImgDataPerLine = iplImg->imageData + i*iplImg->widthStep;
for (int j = 0; j < width; j++)
{
//get the pixel index
//FreeImage_GetPixelIndex(pFrame,j,i,pIntensity);
FreeImage_GetPixelColor(pFrame, j, i, ptrPalette);
ptrImgDataPerLine[3 * j] = ptrPalette->rgbBlue;
ptrImgDataPerLine[3 * j + 1] = ptrPalette->rgbGreen;
ptrImgDataPerLine[3 * j + 2] = ptrPalette->rgbRed;
//ptrImgDataPerLine[3*j] = ptrPalette[intens].rgbBlue;
//ptrImgDataPerLine[3*j+1] = ptrPalette[intens].rgbGreen;
//ptrImgDataPerLine[3*j+2] = ptrPalette[intens].rgbRed;
}
}
printf("convert curFrame end %d \n", curFrame);
cvShowImage("gif", iplImg);
cvWaitKey(30);
FreeImage_UnlockPage(pGIF, pFrame, 1);
}
FreeImage_Unload(fiBmp);
FreeImage_DeInitialise();
return iplImg;
}
IplImage *pImage = cvLoadImage("Verifycode.gif", CV_LOAD_IMAGE_UNCHANGED);
if (pImage==NULL)
{
const char * ch = "Verifycode.gif";
pImage = gif2ipl("Verifycode.gif");
}
解释一下上面的代码,我是从网络中下载来的图,有可能是其他格式,如果打不开,说明是gif。
看来以后不能乱用他人的代码,得先自己写一写。这个代码有问题,内存没有释放完毕。也就是说你打开了一张图,他会一直占用哈哈 20141226
在return前面加一条FreeImage_CloseMultiBitmap(pGIF, GIF_DEFAULT);
请注意了!