`
ypf3027
  • 浏览: 306502 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java多媒体应用JMF

阅读更多

用于现场拍照,生成照片,主要用到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);
 }
 
}

 

分享到:
评论

相关推荐

    java多媒体框架JMF2.1.java多媒体框架JMF2.1

    6. **编程接口**:JMF提供了丰富的编程接口,允许开发者自定义处理多媒体数据的算法,实现更复杂的多媒体应用。 7. **跨平台性**:作为Java的一部分,JMF具有良好的跨平台兼容性,可以在运行Java的任何操作系统上...

    Java多媒体框架JMF中文文档

    Java多媒体框架JMF(Java Media Framework)是一个用于开发多媒体应用程序的平台,它允许Java开发者处理音频、视频和流媒体内容。JMF对于实现视频会议系统和其他多媒体应用是至关重要的。以下是对JMF中涉及的一些...

    JMF java多媒体插件

    总的来说,JMF是Java多媒体开发领域的一个重要组成部分,虽然它有一些局限性,但在许多场景下仍然是一个实用的解决方案。如果你正在开发需要处理多媒体的Java应用,那么JMF的知识将为你打开一扇新的大门。

    java 多媒体 JMF_api文档

    Java多媒体框架(Java Media Framework, 简称JMF)是Java平台上的一个核心API,用于处理音频、视频和其他时间同步的多媒体数据。它为开发者提供了丰富的功能,以支持多媒体内容的播放、捕获、处理和流式传输。在Java...

    JMF安装包,java多媒体安装包

    在"JMF安装包,java多媒体安装包"中,我们主要关注的是如何在Windows操作系统上安装和配置JMF。首先,你需要下载提供的文件“jmf-2_1_1e-windows-i586.exe”,这是一个专门为Windows设计的32位安装程序。在执行安装...

    java多媒体 JMF API

    Java多媒体框架(Java Media Framework, 简称JMF)是Java平台上的一个核心API,主要用于处理音频、视频和其他时间同步的多媒体数据。这个API允许开发者识别、操作和播放多种格式的多媒体文件,为Java应用程序提供了...

    jmf2.1 JAVA多媒体

    "jmf2.1 JAVA多媒体"指的是JMF的2.1.1e版本,这是一个专为Windows i586架构设计的安装包。下面我们将深入探讨JMF及其在多媒体处理中的应用。 1. **JMF简介** JMF,全称为Java Media Framework,是由Sun ...

    JAVA多媒体开发手册 JMF API

    ### JAVA多媒体开发手册 JMF API #### JMF概述与核心组件 Java多媒体框架(JMF)为Java平台引入了一系列强大的多媒体处理能力。JMF不仅支持常见的多媒体文件格式,如AU、AVI、MIDI、MPEG、QuickTime和WAV等,还...

    zzlg 多媒体音乐播放器 java通过调用jmf 实现的音乐播放 歌词同步歌曲搜索 截屏等功能

    ZZLG多媒体音乐播放器是一款基于Java编程语言,利用Java Media ...开发者在设计和实现这个播放器时,不仅考虑到了多媒体处理的基本需求,还关注到了用户交互和个性化体验,展示了Java在开发多媒体应用上的强大潜力。

    JMF.rar_java JMF_jmf

    Java Media Framework(JMF)是Java平台上的...通过深入理解JMF的原理和API,开发者可以创建出功能丰富的多媒体应用,满足各种需求。这份“JMF教程”将是你探索JMF世界的一把钥匙,帮助你快速上手并熟练掌握这个框架。

    java用的Jmf 开发音乐播放器

    JMF 提供了一个统一的接口,使得开发者无需深入理解底层的多媒体编码和解码机制,就能实现多媒体应用,如音乐播放器。 在“java用的Jmf 开发音乐播放器”这个主题中,我们主要会涉及到以下几个关键知识点: 1. **...

    经典Java媒体框架JMF

    这使得JMF成为了Java平台上进行多媒体应用开发的重要工具之一。 #### JMF的主要功能与组成部分 ##### 数据源(DataSource) 数据源(DataSource)是JMF中的核心组件之一,它代表了媒体数据的来源。DataSource可以...

    Java中利用JMF编写摄像头拍照程序.rar_JMF 摄像头_java 摄像头_jmf_拍照_摄像头

    JMF 是由Sun Microsystems开发的,主要用于构建和部署多媒体应用程序。它提供了一个服务框架,允许开发者处理各种媒体类型,如MPEG、AVI、JPEG等。JMF 支持动态加载不同的媒体插件,这些插件能够处理特定的媒体格式...

    JMF(Java Media Framework)多媒体应用开发指南或JMF支持的多媒体开发资源

    本资源文件是一份详尽的Java多媒体开发指南,旨在为开发者提供全面的Java环境下进行多媒体应用开发的指导。无论您是初涉Java多媒体开发的新手,还是已有丰富经验的老手,这份指南都能为您带来实用的帮助和深入的理解...

    Java中利用JMF编写摄像头拍照程序实例

    ### Java中利用JMF编写摄像头拍照程序实例 #### 背景与介绍 在现代软件开发中,多媒体处理是一项非常重要的技术。Java Media Framework (JMF) 是Sun ...希望本文能帮助你在Java多媒体编程领域迈出坚实的一步。

    java_world.rar_java office_jmf_world

    JMF支持多种媒体格式,并允许开发者构建复杂的多媒体应用程序。JMF的关键特性包括: 1. **媒体播放**:可以播放各种音频和视频文件格式。 2. **媒体捕捉**:可以从硬件设备(如摄像头或麦克风)捕捉音频和视频数据...

    Java多媒体技术

    书中涉及到的MediaAPI包括Java2DAPI、Java3DAPI、JavaSoundAPI、JMFAPI等,它们都是Java语言体系专为编写Java多媒体应用程序而开发的应用程序接口。本书包括的内容有:Java多媒体技术概述,Java二维图形图像处理技术...

    JMF下载包,java.media

    通过JMF,开发者可以创建复杂的多媒体应用,如在线流媒体服务器、多媒体播放器和视频会议系统等。JMF支持多种编码格式和协议,包括MPEG、WAV、QuickTime、RealMedia等。 **核心组件** 1. **Service Provider ...

    java多媒体技术配套光盘代码

    学习和掌握Java多媒体技术,特别是JMF,有助于开发者创建功能丰富的多媒体应用程序,满足用户对音视频播放、编辑、分享的需求。通过研究"java多媒体技术配套光盘代码"中的内容,开发者可以加深对JMF的理解,提升在...

Global site tag (gtag.js) - Google Analytics