您的位置:首页 > 编程语言 > C语言/C++

QQ聊天 GIF转为IplImage的解决方法的問題

2015-06-20 23:11 573 查看
首先照著summersolstice的文章
http://blog.csdn.net/summersolstice/article/details/5123813
下載並且安裝CXimage這個類之後,

我的安裝方式不太正規,

我是先到
http://www.codeproject.com/Articles/1300/CxImage
下載了

Download full source files - 2.52 MB

之後直接把裡頭的 X字頭的.H 以及 .C檔案 丟進專案執行目錄,

接著

我的stdafx.h加入以下 #pragma 去抓我的lib,當然我為了方便 所有lib都丟在與專案相同執行的目錄下,反正也沒幾個檔案。

再來就是很麻煩的地方了,因為我不是用網路上正規CXIMAGE的方式去解壓縮檔案執行專案產生的.H,

許多前面提到的.H檔案開頭都要手動加上 #include"stdafx.h",大概有10多個吧,加一下就好

,並且在專案的property上要選擇MD去執行,然後我使用的是Unicode,用習慣了就是看到CHAR就改TCHAR,有String的 " " 地方改成 _T(" ")就好,習慣了就可以寫出

切換Mutibyte也能使用的好程序。

接著就是要感謝summersolstice的程序指引

因為我與三樓遇到了相同的問題,就是畫面只有找到第一張Frame。

所以我找到了這個api

//cxImg.SetFrame(20);  //可以找到第20張frame

//cxImg.SetFrame(10);//可以找到第10張frame


//cxImg.Load(filename,CXIMAGE_FORMAT_GIF);

//////////////////////////////////////////////////////////////////////////////////////

至於代碼我是用MFC所以太長了,我就不完全展示,

主要開頭:

#include "stdafx.h"

#include "GIF_SHOW.h"

#include "GIF_SHOWDlg.h"

#include "afxdialogex.h"

#include <opencv2\opencv.hpp>  

#include "cv.h"      //OpenCV should be installed    

#include "ximage.h"  //CxImage should be installed  

#define MAXSTRINGSIZE 255  

#include <iostream>  

using namespace cv;  

using namespace std;

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

//然後

IplImage*  gif2ipl(TCHAR* filename)  

{  
CxImage HowmuchFrames; 
HowmuchFrames.Load(filename,CXIMAGE_FORMAT_GIF);  
int a=HowmuchFrames.GetNumFrames();

    CxImage cxImg;  
cxImg.SetFrame(20);
//cxImg.SetFrame(10);

    cxImg.Load(filename,CXIMAGE_FORMAT_GIF);  

//cxImg.GetFlags();

// cxImg.SetFrame(5);

    cxImg.Save(_T("tmp.bmp"),CXIMAGE_FORMAT_BMP);  

    //use the system command to hide the BMP file once it creates;    

    char* strHiden = new char[MAXSTRINGSIZE];  

    sprintf(strHiden,"attrib +h %s","tmp.bmp");  

 //   system(strHiden);  

    delete[] strHiden;  

    IplImage* img = cvLoadImage("tmp.bmp",CV_LOAD_IMAGE_UNCHANGED);  

  

    //use the system command to delete the BMP temperory file  

    char* strTemp = new char[MAXSTRINGSIZE];  

   sprintf(strTemp,"del /a h %s","tmp.bmp"); //好酷的用法!~  

 //   system(strTemp);//*/  

    delete[] strTemp;  

    return img;  

  

}  

//這個Function就是拿來吃GIF轉成OPENCV認識的BMP圖檔

///我的Button Function裡頭塞了↓

TCHAR* filename = _T("res/QQQ7.gif");
IplImage* iplImg = gif2ipl(filename);  
//IplImage* iplImg = cvLoadImage("tmp.bmp",CV_LOAD_IMAGE_UNCHANGED);  ; 
//cvNamedWindow((char*)filename,1);  
cvShowImage((char*)filename,iplImg);  
cvWaitKey(0);  
cvReleaseImage(&iplImg);//if used gif2ipl function ,we must use cvReleaseImage to avoid memory leak;  

如此操作只要再加個for迴圈去跑估計就能跑出動化效果,這個部份我過段時間再寫,因為我是要把程式塞進聊天室的,這只是實驗。

完成以上步驟後就能像下面:

有了這些工具應該就能完成QQ Dialog上選GIF表情了。(以下是還在施工中的畫面.....)

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc c++ qq 聊天 opencv