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对象,实例化一个处理
没有合适的资源?快使用搜索试试~ 我知道了~
创新实践项目趣味哈哈镜
共95个文件
class:65个
java:16个
avi:5个
需积分: 5 2 下载量 201 浏览量
2022-12-06
15:40:41
上传
评论 1
收藏 190.15MB RAR 举报
温馨提示
哈哈镜特效包括:纵向拉长; 纵向中轴外凸;纵向中轴内凹中心点圆形内凹中心点圆形外凸;横向拉长; 横向中轴外凸;横纵向中轴内凹 视频位置选择包括:上下分区 左右分区田字分区
资源推荐
资源详情
资源评论
收起资源包目录
趣味哈哈镜.rar (95个子文件)
趣味哈哈镜
bin
functions
JMFTools.class 12KB
GainEffect.class 5KB
HahajingEffect.class 5KB
HahajingEffect2.class 5KB
NegativeEffect.class 4KB
StateHelper.class 2KB
HahajingEffect4.class 6KB
HahajingEffect3.class 5KB
testcode
JMFTools.class 10KB
test2.class 734B
Testsetting$3.class 1KB
Testsetting.class 3KB
Testsetting$1.class 1KB
Testsetting$2.class 1KB
backgroundtest$1.class 980B
WebCamSwingSimplified$ImagePanel.class 1KB
MyVideoPlayer$1.class 860B
FirstCapture$1.class 720B
background.class 2KB
Testsetting$4.class 1KB
FirstCapture$ImagePanel.class 1KB
FirstCapture.class 6KB
MyVideoPlayer.class 4KB
test3.class 526B
Save2File.class 3KB
test1.class 2KB
WebCamSwingSimplified.class 9KB
backgroundtest.class 5KB
WebCamSwingSimplified$StateHelper.class 2KB
backgroundtest$2.class 1KB
views
MainWindowTest.class 5KB
MainWindowTest$14.class 764B
MainWindowTest$8.class 762B
MainWindow2.class 10KB
MainWindowTest$2.class 762B
videoformat.class 5KB
MainWindow2$2.class 669B
MainWindowTest$5.class 762B
photoformat$1.class 1KB
Settingwindow$3.class 1KB
MainWindowTest$3.class 762B
savepathwindow2.class 3KB
Settingwindow$1.class 875B
WebCamSwingSimplified$ImagePanel.class 1KB
Settingwindow$2.class 1KB
MainWindowTest$10.class 764B
Settingwindow$4.class 1KB
MainWindowTest$9.class 762B
videoformat$1.class 1KB
MainWindowTest$15.class 764B
MainWindowTest$1.class 762B
savepathwindow.class 3KB
MainWindowTest$4.class 762B
MainWindowTest$13.class 764B
MainWindowTest$16.class 1KB
photoformat.class 5KB
WebCamSwingSimplified.class 9KB
MainWindowTest$6.class 762B
Settingwindow.class 3KB
MainWindowTest$7.class 762B
MainWindowTest$12.class 764B
WebCamSwingSimplified$StateHelper.class 2KB
MainWindow2$1.class 815B
MainWindowTest$11.class 764B
message.class 1KB
nullnull 270KB
jmf-2_1_1e-windows-i586.exe 4.98MB
commons-lang3-3.9-bin.zip 2.24MB
commons-text-1.8-bin.zip 2.27MB
.settings
org.eclipse.core.resources.prefs 72B
org.eclipse.jdt.core.prefs 598B
src
functions
JMFTools.java 17KB
HahajingEffect3.java 7KB
GainEffect.java 6KB
HahajingEffect.java 7KB
HahajingEffect2.java 6KB
HahajingEffect4.java 9KB
NegativeEffect.java 7KB
StateHelper.java 2KB
views
Settingwindow.java 5KB
savepathwindow2.java 3KB
videoformat.java 7KB
MainWindow2.java 16KB
MainWindowTest.java 10KB
photoformat.java 7KB
message.java 1KB
savepathwindow.java 5KB
.project 388B
jdk-8u66-windows-i586.exe 181.31MB
.classpath 1KB
Capture
2019-11-26 016+.25.38.avi 0B
2019-11-26 016+.25.10.avi 0B
2019-11-26 016+.32.08.avi 0B
2019-12-07 17.17.14.avi 1.32MB
2019-11-26 016+.25.21.avi 0B
共 95 条
- 1
资源评论
SkyChen_
- 粉丝: 2253
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功