MFC+OPENCV实现JPEG图片的播放

用vc6.0进行开发真的有点蛋疼,在实现jpeg图片的播放,vc6.0的picture控件居然只支持位图>_<
开始想法是在程序中加一个编码过程,边读图边解码边显示,先将JPEG图片转化为位图再显示,但代价是在OPENCV中的自带的函数支持编解码,但要先写下来,所以读写再度时间较长无法满足实时性的要求;
第二种方法是用VTK中带的vtkJPEGReader类,在MFC中创建一个VTK的自定义控件,后读入显示,但结果是读入显示太慢,屏幕会一闪一闪的,速度太慢,查资料说要用双缓冲的技术;
后继续找资料,找到了cvvImage的类,这个类功能有点强;
Opencv vc6.0的配置直接网上搜吧,这里不在累述
建立一个界面,如图:
这里写图片描述
简单地包含一个Picture的控件和一个按钮控件
设置Picture控件的ID为:IDC_Picture
往Dlg.c文件中加入opencv的头文件:

#include "cv.h"
#include "highgui.h"

在Debug运行时还应加入highgui100.dll到目录下
接着对按钮继续消息相应函数的编写:

    IplImage *image=NULL; //原始图像
    char filename[128];
    for(int i=2;i<300;i++)
    {
        sprintf(filename,"5//%d.jpg",i);//""中间填写图片的路径
        //if(image) 
        //  cvReleaseImage(&image);
        image = cvLoadImage(filename); //显示图片
        cvWaitKey(3);
        DrawPicToHDC(image, IDC_Picture);
        Sleep(30);
        cvReleaseImage(&image);
    }

在MFC的框架下cvWaitKey();这一函数无法延时;
用for(;;)循环也不能进行延时;
经测试Sleep()可以进行延时

void CPicturesDlg::DrawPicToHDC(IplImage *img, UINT ID)
{
    CDC *pDC = GetDlgItem(ID)->GetDC();
    HDC hDC= pDC->GetSafeHdc();
    CRect rect;
    GetDlgItem(ID)->GetClientRect(&rect);
//  cvWaitKey(30000000);
    CvvImage cimg;
    cimg.CopyOf(img);
    cimg.DrawToHDC(hDC,&rect);
    //cvWaitKey(30000000);
    ReleaseDC(pDC);
}

结果是应该能达到二十多帧,
结果:
这里写图片描述
双缓冲的技术可能马上就会用到>_<
除非有特殊要求,劲量还是不要用VC6.0
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值