import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
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;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
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;
/**
* @author
* @version 创建时间:Apr 28, 2008 8:02:26 PM
* 类说明:
*/
public class FirstCapture extends JPanel implements ActionListener{
private CaptureDeviceInfo captureDeviceInfo=null;
private MediaLocator mediaLocator=null;
private static Player player=null;
private ImagePanel imagePanel=null;
private JButton capture;
private Buffer buffer=null;
private VideoFormat videoFormat=null;
private BufferToImage bufferToImage=null;
private Image image=null;
/**
* @param args
*/
public FirstCapture()
{
setLayout(new BorderLayout());
setSize(320,550);
String str="vfw:Microsoft WDM Image Capture (Win32):0";
captureDeviceInfo=CaptureDeviceManager.getDevice(str);
mediaLocator=new MediaLocator("vfw://0");
imagePanel=new ImagePanel();
capture=new JButton("拍照");
capture.addActionListener(this);
try {
player=Manager.createRealizedPlayer(mediaLocator);
player.start();
Component comp;
Component comp1;
if((comp=player.getVisualComponent())!=null)
add(comp,BorderLayout.NORTH);
// if((comp1=player.getControlPanelComponent())!=null)
// add(comp1,BorderLayout.CENTER);
} catch (NoPlayerException 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();
}
add(imagePanel,BorderLayout.SOUTH);
add(capture,BorderLayout.CENTER);
}
@Override
public void print(Graphics g) {
// TODO Auto-generated method stub
super.print(g);
g.setColor(new Color(255,0,0));
g.drawLine(0, 0, 100, 100);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame f = new JFrame("FirstCapture");
FirstCapture cf = new FirstCapture();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
player.close();
System.exit(0);}});
f.add("Center",cf);
f.pack();
f.setSize(new Dimension(320,550));
f.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
FrameGrabbingControl fgc=(FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");
buffer=fgc.grabFrame();
bufferToImage=new BufferToImage((VideoFormat)buffer.getFormat());
image=bufferToImage.createImage(buffer);
imagePanel.setImage(image);
saveImage(image,"D:/test.jpg");
}
public static void saveImage(Image image,String path)
{
BufferedImage bi=new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.drawImage(image, null, null);
FileOutputStream fos=null;
try {
fos=new FileOutputStream(path);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JPEGImageEncoder je=JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam jp=je.getDefaultJPEGEncodeParam(bi);
jp.setQuality(0.5f, false);
je.setJPEGEncodeParam(jp);
try {
je.encode(bi);
fos.close();
} catch (ImageFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class ImagePanel extends Panel
{
public Image myimg = null;
public ImagePanel()
{
setLayout(null);
setSize(320,240);
}
public void setImage(Image img)
{
this.myimg = img;
repaint();
}
public void paint(Graphics g)
{
if (myimg != null)
{
g.drawImage(myimg, 0, 0, this);
}
}
}
}
分享到:
相关推荐
### JMF教程详解及简单例子分析 #### 一、关于此指南 本指南旨在帮助读者了解Java Media Framework(简称JMF)的基础知识及其在实际应用中的实现方式。JMF是Sun Microsystems开发的一个Java API,用于处理多媒体...
JMF播放MP3简单例子,Eclipse项目,免安装JMF,但是要将JMF安装时产生的20个dll文件拷贝在jre\bin下面才能正常运行。 关于20个dll的详情,可以下载我的JMF版音乐播放器,里面有文档说明: ...
在这个“java 通过jmf播放视频简单demo”中,我们将探讨如何利用JMF在Java应用程序中实现视频播放功能。 首先,我们要了解JMF的基本概念。JMF是一种可扩展的平台,它提供了媒体数据的捕捉、处理、显示和传输的能力...
### JMF使用实例详解 #### 一、引言 JMF(Java Media Framework)是用于处理音频和视频的Java API集合。自1997年左右发布以来,它经过了一系列改进,目前广泛使用的版本为JMF 2.1.1。尽管JMF具有许多便捷的功能,...
在这个"jmf rtp 传输视频例子"中,我们将探讨如何使用JMF和RTP来实现实时视频传输。 首先,我们需要理解JMF的基本工作原理。JMF提供了一个服务接口,允许开发者注册媒体处理器、捕获设备以及播放器。通过这些接口,...
这个“JMF安装程序+基础教程+项目实例”压缩包提供了一个全面的入门指南,帮助用户了解并掌握JMF的使用。下面我们将深入探讨JMF的核心概念、安装过程、基础教程以及项目实例。 一、JMF核心概念 1. **组件体系**:...
**标题解析:** "简单的jmf搞笑程序" 这个标题暗示了...综上所述,这个“简单的jmf搞笑程序”提供了一个学习和实践JMF的实例,同时也可能是一个有趣的娱乐工具,有助于开发者提升其在多媒体处理和Java编程方面的技能。
本项目是基于JMF构建的一个简单但功能完备的MP3播放器,同时也包含了基本的视频播放功能。这个软件包的焦点在于理解和实现多媒体数据处理的Java编程技术。 首先,我们来深入理解JMF。JMF允许开发者处理多种媒体格式...
这个简单的示例展示了JMF如何与摄像头交互,但实际应用可能需要更复杂的处理,例如调整帧率、处理视频流的编码和解码等。此外,由于JMF的维护和支持已经停止,现代Java应用程序可能考虑使用其他库,如OpenCV、JavaCV...
7. **实例程序**:压缩包中的源代码实例可能涵盖了多种应用场景,如简单的播放器、复杂的流媒体服务器、媒体转换工具等。通过分析和运行这些示例,可以深入理解JMF的实践应用。 8. **问题解决**:在实际开发中可能...
本文档将深入讲解JMF的基础技术,包括如何安装JMF,以及如何使用它来创建一个简单的音频播放器。 首先,安装JMF通常涉及双击安装程序并选择将库文件移动到系统目录,比如Windows下的`Windows/Systemdirectory`,...
在这个“java jmf 例子”中,我们将探讨如何利用JMF进行多媒体编程。 首先,JMF的安装至关重要。在开始任何编程之前,你需要从官方或可靠的第三方源下载JMF的安装包,并按照指示完成安装过程。安装后,JMF的库文件...
JMF2.1 Java媒体框架(JMF)使你能够...它是一个相当复杂的系统,完全了解这个系统可能需要花上几周的时间,但是这篇文章将主要介绍JMF的几个核心接口和类,然后通过一个简单的例子向你展示如何利用该接口进行编程。
JMF提供了丰富的API,使得在Java应用程序中集成多媒体功能变得简单。"JMF.zip_JMF W_Java 播放器_hookqq_jmf_jmf-2_0-spec"这个压缩包包含了一个基于Java开发的媒体播放器示例,适用于初学者学习和理解JMF的用法。 ...
7. **示例代码**:下面是一个简单的JMF播放音频文件的示例: ```java import javax.media.Manager; import javax.media.MediaLocator; import javax.media.Player; public class JmfPlayer { public static ...
### JMF介绍及实例 #### 一、JMF概述 JMF(Java Media Framework)是Sun Microsystems(现已被Oracle收购)推出的一个强大的多媒体框架,它为Java开发人员提供了一套全面的API,用于处理音频、视频和其他形式的时...
4. **验证安装**:通过编写一个简单的Java程序,尝试导入JMF相关的类并运行,如果能正常运行,说明JMF已经成功安装。 ### JMF的配置 1. **注册组件**:JMF需要注册支持的媒体格式和设备。在`%JAVA_HOME%\lib\jmf....
Player用于简单的播放任务,而Processor则提供了更高级的功能,如剪辑、转码和混音。 在JMF的入门教程中,你会学习到如何使用基本的API来创建和控制媒体播放。这包括如何加载媒体文件,如何启动、暂停和停止播放,...
在这个例子中,我们首先创建了一个`Manager`实例,然后通过`locateDevice`方法找到一个可用的视频输入设备(即摄像头)。接着,我们设置捕获的视频格式为YUV,然后打开设备获取`DataSource`。实际应用中,你需要添加...
要创建一个简单的音乐播放器,首先需要在项目中引入JMF的库文件。这通常意味着将JMF的jar文件添加到项目的类路径中。接着,可以创建一个JMF的Player对象,这个对象负责加载、解码和播放媒体文件。例如,可以使用`...