用于现场拍照,生成照片,主要用到Java Media Framework(JMF)。
首先到SUN下载最新的JMF,然后安装。http://java.sun.com/products/java-media/jmf/index.jsp
或者在我的附件里面找到JMF下载安装。
然后,说一下需求
1. 用摄像头拍照
2. 按下拍照按钮,获取摄像头内的图像
3. 保存为本地图像为jpg格式,不得压缩画质
4. 如果对当前照片不满意,可以重新拍摄。
相信也是大家最感兴趣的部分也就是如何让一个摄像头工作,并拍下一张照片了。
下面是一个已经实现了的示例。
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.event.*;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.File;
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 javax.swing.JScrollPane;
import javax.swing.JTextField;
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;
public class GetPhoto extends JPanel implements ActionListener{
private CaptureDeviceInfo captureDeviceInfo=null;
private MediaLocator mediaLocator=null;
private static Player player=null;
private ImagePanel imagePanel=null;
private JButton jbok,jbcancel;
private Buffer buffer=null;
private VideoFormat videoFormat=null;
private BufferToImage bufferToImage=null;
private Image image=null;
private JPanel jp=new JPanel();
public GetPhoto()
{
//setLayout(new BorderLayout());
this.setLayout(null);
setSize(300,500);
String str="vfw:Microsoft WDM Image Capture (Win32):0";
captureDeviceInfo=CaptureDeviceManager.getDevice(str);
mediaLocator=new MediaLocator("vfw://0");
imagePanel=new ImagePanel();
jbok=new JButton("拍 照");
jbcancel=new JButton("重 拍");
jbok.addActionListener(this);
jbcancel.addActionListener(this);
try {
player=Manager.createRealizedPlayer(mediaLocator);
player.start();
Component comp;
if((comp=player.getVisualComponent())!=null)
comp.setBounds(0, 0, 240, 180);
this.add(comp);
} catch (NoPlayerException e)
{
e.printStackTrace();
} catch (CannotRealizeException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
jp.add(jbok);
jp.add(jbcancel);
jp.add(imagePanel);
jp.setBounds(0, 180, 240, 200);
this.add(jp);
}
public void print(Graphics g)
{
super.print(g);
g.setColor(new Color(255,0,0));
g.drawLine(0, 0, 100, 100);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jbok)
{
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,"temp.jpg");
}
if(e.getSource()==jbcancel)
{
imagePanel.setImage(null);
}
}
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)
{
e.printStackTrace();
}
JPEGImageEncoder je=JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam jp=je.getDefaultJPEGEncodeParam(bi);
jp.setQuality(1f, false);
je.setJPEGEncodeParam(jp);
try {
je.encode(bi);
fos.close();
} catch (ImageFormatException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}
public static File getImage()
{
File f=new File("temp.jpg");
return f;
}
class ImagePanel extends Panel
{
public Image myimg = null;
public ImagePanel()
{
setLayout(null);
setSize(240,180);
}
public void setImage(Image img)
{
this.myimg = img;
repaint();
}
public void paint(Graphics g)
{
if (myimg != null)
{
g.drawImage(myimg, 0, 0, this);
}
}
}
public static void main(String[] args)
{
JFrame f = new JFrame("FirstCapture");
GetPhoto cf = new GetPhoto();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
player.close();
System.exit(0);}});
f.add("Center",cf);
f.pack();
f.setBounds(100,100,240,550);
f.setVisible(true);
}
}
分享到:
- 2008-10-25 10:10
- 浏览 2562
- 评论(0)
- 论坛回复 / 浏览 (0 / 7224)
- 查看更多
相关推荐
JMF的api java 多媒体技术应用。主要用在java开发视频通信方面。很难找到的哦
JAVA多媒体开发手册,Java多媒体框架(JMF)中包含了许多用于处理多媒体的API。它是一个相当复杂的系统,完全了解这个系统可能需要花上几周的时间,但是这篇文章将主要介绍JMF的几个核心接口和类,然后通过一个简单...
书中涉及到的MediaAPI包括Java2DAPI、Java3DAPI、JavaSoundAPI、JMFAPI等,它们都是Java语言体系专为编写Java多媒体应用程序而开发的应用程序接口。本书包括的内容有:Java多媒体技术概述,Java二维图形图像处理技术...
JMF扩展了J2SE平台的多媒体功能,允许Java应用和Applet截取,回放,转换包括音频和视频在内的多种媒体。JMF支持多种媒体格式,具体参看资源[1]的官方文档。 我们可以利用.jar格式来把解码器和媒体文件打包成一个...
JMF是java的多媒体框架,该资源内含对jmf的完整的应用代码。实现了视频的完整传输。 JMF是java的多媒体框架,该资源内含对jmf的完整的应用代码。实现了视频的完整传输。
Java中利用JMF的多媒体编程
JAVA多媒体技术的核心是Java媒体框架 JMF(Java Media Framework)。JMF中包含了许多用于处理多媒体的API,它是一个很好的多媒体编程工具,同时也是一个相当复杂的系统。JMF的主要应用功能之一是多媒体数据流在网络...
JMF在所有的Java类型中都可用,这使在客户端上不必要有任何特定的媒体技术就可以部署媒体--所需要的只是J2SE Java运行时间。更重要的是它能利用.jar文件格式的一些性能把解码器和媒体组成到一个文件中,创建一个\\\\...
JAVA多媒体技术的核心是Java媒体框架 JMF(Java Media Framework)。JMF中包含了许多用于处理多媒体的API,它是一个很好的多媒体编程工具,同时也是一个相当复杂的系统。JMF的主要应用功能之一是多媒体数据流在网络...
用到多媒体技术(JAVA 多媒体框架JMF),视频和音频用TRP协议传输,用到Socket编程技术,多播技术。网络视频会议首先是基于网络传输的,那么就必然要依托于JAVA网络编程的相关知识。在这基础上,由于相关音频、视频...
JAVA多媒体技术的核心是Java媒体框架 JMF(Java Media Framework)。JMF中包含了许多用于处理多媒体的API,它是一个很好的多媒体编程工具,同时也是一个相当复杂的系统。JMF的主要应用功能之一是多媒体数据流在网络...
JAVA多媒体技术的核心是Java媒体框架 JMF(Java Media Framework)。JMF中包含了许多用于处理多媒体的API,它是一个很好的多媒体编程工具,同时也是一个相当复杂的系统。JMF的主要应用功能之一是多媒体数据流在网络...
基于JMF的媒体处理的研究和应用,涂昀,,Java Media Framework (JMF)是由SUN公司开发的一种基于JAVA平台的多媒体应用程序接口,用它能够编写出功能强大的多媒体程序,却不用关心底层
使用JMF、Java Sound、JAI和Java 3D向应用程序中添加多媒体 使用JavaMail开发自动化电子邮件应用程序 将陈旧的系统转换为Web服务 学习如何使用Java Speech处理自然语言 对应用程序进行国际化改造
使用JMF、Java Sound、JAI和Java 3D向应用程序中添加多媒体 使用JavaMail开发自动化电子邮件应用程序 将陈旧的系统转换为Web服务 学习如何使用Java Speech处理自然语言 对应用程序进行国际化改造
JMF即Java Media Framework,是Sun公司针对多媒体应用开发的一个Java扩展包,安装后可使用jmf.jar包。
(内有安装包、源码及帮助文档和本人搜集的一些关于JMF的资料)一个纯java编写的多媒体操作框架,应用简单,开发快捷
使用JMF、Java Sound、JAI和Java 3D向应用程序中添加多媒体 使用JavaMail开发自动化电子邮件应用程序 将陈旧的系统转换为Web服务 学习如何使用Java Speech处理自然语言 对应用程序进行国际化改造