package functions;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Vector;
import javax.media.CannotRealizeException;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Codec;
import javax.media.ControllerClosedEvent;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.DataSink;
import javax.media.Format;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoDataSinkException;
import javax.media.NoDataSourceException;
import javax.media.NoPlayerException;
import javax.media.NoProcessorException;
import javax.media.NotRealizedError;
import javax.media.Player;
import javax.media.Processor;
import javax.media.ProcessorModel;
import javax.media.UnsupportedPlugInException;
import javax.media.control.FrameGrabbingControl;
import javax.media.control.TrackControl;
import javax.media.format.VideoFormat;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import org.apache.commons.text.StringEscapeUtils;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import com.sun.media.format.AviVideoFormat;
import com.sun.org.apache.bcel.internal.generic.NEW;
import com.sun.org.apache.regexp.internal.recompile;
import jmapps.util.StateHelper;
import sun.java2d.pipe.SpanShapeRenderer.Simple;
import views.Settingwindow;
import views.photoformat;
import views.savepathwindow;
import views.savepathwindow2;
import views.videoformat;
import javax.*;
import javax.imageio.ImageIO;
import javax.media.protocol.ContentDescriptor;
import javax.media.protocol.DataSource;
import javax.media.protocol.FileTypeDescriptor;
import javax.media.protocol.SourceCloneable;
import javax.media.util.BufferToImage;
import javax.media.Buffer;
import javax.media.CannotRealizeException;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
public class JMFTools {
private static String deviceStr = "vfw:Microsoft WDM Image Capture (Win32):0"; //设备字符串
private static CaptureDeviceInfo devInfo = null; // 设备信息
private static MediaLocator ml = null; // 摄像头视频地址
private static Processor originalPorcessor = null; // 摄像头的原始处理器
private static Player player = null; // 摄像头原始的播放器
private static DataSource OutputData = null; // originalPorcessor的输出流
private static DataSource cloneData = null; // 初始的数据源
private static Processor videoProcessor = null; // 转换处理器
private static Player transPlayer=null;//转换视频播放器
private static Format suitableFormat = new Format(VideoFormat.RGB);//哈哈镜是RGB颜色,所以有一个格式转换 三原色
private static String capturePath=System.getProperty("user.dir")+File.separator+"Capture"+File.separator;//当前工程路径
//https://blog.csdn.net/zhuhuiby/article/details/8569516 上面的资料来源
private static Processor captureProcessor;//捕获视频的处理器
private static DataSink dataSink=null;//保存转换视频文件的
private static StateHelper sh=null;//处理器状态控制
private static String fileTypeDescriptor =FileTypeDescriptor.MSVIDEO;//输出文件的格式avi
private static String sufix =".avi";//后缀
private static AviVideoFormat aviFormat =new AviVideoFormat(VideoFormat.YUV);//YUV是JMF的内部格式
public static void initialize() {
if (devInfo == null) {
devInfo = CaptureDeviceManager.getDevice(deviceStr);// 根据字符串获取采集设备(摄像头)的引用
}
if (ml == null) {
ml = devInfo.getLocator(); // 从CaptureDevicesInfo对象中获取MediaLocator对象,然后用它来创建一个DataSource数据源对象;
//获取采集设备的定位器的引用,需要根据此引用来创建视频播放器
}
/**
* 处理器的格式和描述
*/
Format[] FORMATS = new Format[] { suitableFormat };//设置RGB格式
ContentDescriptor CONTENT_DESCRIPTOR = new ContentDescriptor(ContentDescriptor.RAW);//内容原始描述符 raw原始的
try {
originalPorcessor = Manager.createRealizedProcessor(new ProcessorModel(ml, FORMATS, CONTENT_DESCRIPTOR));
OutputData = originalPorcessor.getDataOutput(); // 摄像头输出形成新数据源
//对摄像头的输出进行克隆,形成新的数据源
OutputData = Manager.createCloneableDataSource(OutputData);
cloneData = ((SourceCloneable) OutputData).createClone();
} catch (NoProcessorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CannotRealizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
player = Manager.createRealizedPlayer(OutputData);
//这里启动摄像头的处理器和播放器,才能使转换播放器同时输出
videoProcessor=Manager.createProcessor(cloneData);////////////稍加这一句
originalPorcessor.start();
player.start();
} catch (CannotRealizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoPlayerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void close() {
if (videoProcessor != null) {
videoProcessor.stop();
videoProcessor.close();
}
if (cloneData != null) {
try {
cloneData.stop();
} catch (IOException e) {
e.printStackTrace();
}
cloneData.disconnect();
}
if (OutputData != null) {
try {
OutputData.stop();
} catch (IOException e) {
e.printStackTrace();
}
OutputData.disconnect();
}
if (player != null) {
player.stop();
player.close();
}
if (originalPorcessor != null) {
originalPorcessor.stop();
originalPorcessor.close();
}
ml = null;
devInfo = null;
}
public static Vector<String> detectDevices() {
Vector<String> deviceList = new Vector<String>();
deviceList.add(devInfo.getName());
return deviceList;
}
public static Component startCamera() {
if (player != null) {
originalPorcessor.start(); ////////////////////////少加一句
player.start();
Component comp = player.getVisualComponent();
return comp;
} else {
return null;
}
}
public static Component transform(int x) {
//ContentDescriptor cONTENT_Descriptor = new ContentDescriptor(ContentDescriptor.RAW);
//Format[] FORMATS = new Format[] { suitableFormat };
ContentDescriptor CONTENT_DESCRIPTOR = new ContentDescriptor(ContentDescriptor.RAW);
TrackControl[] tc = null; //各条媒体踪迹的数据控制处理对象
try {
//videoProcessor = Manager.createRealizedProcessor(new ProcessorModel(cloneData, FORMATS, CONTENT_DESCRIPTOR));
//后面要配置videoProcessor,所以不能创建Realized Processor
videoProcessor = Manager.createProcessor(cloneData); //根据cloneData对象,实例化一个处理
没有合适的资源?快使用搜索试试~ 我知道了~
创新实践项目趣味哈哈镜
需积分: 5 32 浏览量
2022-12-06
15:40:41
上传
评论
收藏 190.15MB RAR 举报
哈哈镜特效包括:纵向拉长; 纵向中轴外凸;纵向中轴内凹中心点圆形内凹中心点圆形外凸;横向拉长; 横向中轴外凸;横纵向中轴内凹 视频位置选择包括:上下分区 左右分区田字分区
资源推荐
资源详情
资源评论


收起资源包目录










































































































共 95 条
- 1
- 2
- 3
- 4
- 5
- 6
- 19
资源评论

Super_T9527
- 粉丝: 1364
- 资源: 7

上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
