学习javacv之八:拖动进度条,控制播放视频

package com.csdn.linghu.javacvlean04;

import java.nio.IntBuffer;

import org.bytedeco.javacpp.opencv_core.IplImage;
import org.bytedeco.javacpp.opencv_highgui.CvCapture;
import org.bytedeco.javacpp.opencv_highgui.CvTrackbarCallback;

import static org.bytedeco.javacpp.opencv_highgui.*;

public class Trackbar {
public static void main(String[] args) {
	//进度条最大值
	int switchValue =30;
	//每帧要显示的图像
	IplImage frammeImage = null;
	//回调方法载体
	SwitchCallBack switchCallBack =  new SwitchCallBack();
	//读取视频
	CvCapture cvCapture = cvCreateFileCapture("resources/when.avi");
	if (cvCapture==null) {
		System.out.println("读取文件出错!");
		return;
	}
	//创建窗口,大小可调整
	cvNamedWindow("Trackbar", 0);
	cvCreateTrackbar(
			//进度条的名称
		    "Progress",
		    //窗口的名称
		    "Trackbar",
		    //当前进度条的值
		    switchCallBack.getIntBuffer(),
		    //进度条最大值
		    switchValue,
		    //回调函数载体
		    switchCallBack
		  );
	while(true) {
		//只要进度条,没有拖到最后,就进行播放
	    if(switchCallBack.getIntBuffer().get(0)!=30&&switchCallBack.getIntBuffer().get(0)!=0){
	    	frammeImage = cvQueryFrame(cvCapture);
	   	 	if(frammeImage==null) break;
	    }
	    //展示当前帧,以实现视频的播放
	    cvShowImage( "Trackbar", frammeImage);
	    if(cvWaitKey(10)==27 ){
	    	break;
	    } 
	  }
	//释放资源
	cvReleaseCapture(cvCapture);
	cvDestroyWindow("Trackbar");
}

}
/**
 * @功能说明:实现拖动进度条的过程中的函数回调
 * @time:2014年7月19日下午6:05:28
 * @version:1.0
 *
 */
class SwitchCallBack extends CvTrackbarCallback{
	private IntBuffer intBuffer = IntBuffer.allocate(30);
	@Override
	public void call(int position){
		//进度条当前位置在0,提示关闭
		if (position ==0) {
			switchBegin();
			intBuffer.clear();
			intBuffer.put(position);
		//进度条当前位置是30,播放结束
		}else if(position==30){
			switchEnd();
			intBuffer.clear();
			intBuffer.put(position);
		//清空进度条缓存值,放入当前值
		}else{
			intBuffer.clear();
			intBuffer.put(position);
			switchOn();
		}
		
	}
	public void switchOn(){
		System.out.println("正在播放:");
	}
	public void switchBegin(){
		System.out.println("即将开始播放!");
	}
	public void switchEnd(){
		System.out.println("播放完毕");
	}
	public IntBuffer getIntBuffer() {
		return intBuffer;
	}
	public void setIntBuffer(IntBuffer intBuffer) {
		this.intBuffer = intBuffer;
	}
	
}

实现效果:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值