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表情了。(以下是還在施工中的畫面.....)
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表情了。(以下是還在施工中的畫面.....)
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 关于指针的一些事情
- QQ商业化,如何实现从0到1的破局?
- 十年生死两茫茫,Linux QQ 突然复活!
- [原创]java局域网聊天系统
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 路由器端QQ封堵方案
- QQ输入法自动删除其它输入法的解决方法
- 让普通QQ号也能克隆QQ好友
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- VBS取QQ或TM自动登录代码并防止关闭的脚本
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题