Java中利用JMF编写摄像头拍照程序
我把程序分为两种,有趣的和无趣的,最近做了几个有趣的项目,其中一个,应当就算是摄像头拍照程序了。用
于现场拍照,生成照片,主要用到Java Media Framework(JMF)。
首先到SUN下载最新的JMF,然后安装。http://java.sun.com/products/java-media/jmf/index.jsp
然后,说一下需求
1. 用摄像头拍照
2. 在文本框输入文件名
3. 按下拍照按钮,获取摄像头内的图像
4. 在拍下的照片上有一红框截取固定大小的照片。
5. 保存为本地图像为jpg格式,不得压缩画质
技术关键,相信也是大家最感兴趣的部分也就是如何让一个摄像头工作,并拍下一张照片了。
利用JMF,代码很简单:
//利用这三个类分别获取摄像头驱动,和获取摄像头内的图像流,获取到的图像流是一个Swing的Component
组件类
public static Player player = null;
private CaptureDeviceInfo di = null;
private MediaLocator ml = null;
//文档中提供的驱动写法,为何这么写我也不知:)
String str1 = "vfw:Logitech USB Video Camera:0";
String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
di = CaptureDeviceManager.getDevice(str2);
ml = di.getLocator();
try
{
player = Manager.createRealizedPlayer(ml);
player.start();
Component comp;
if ((comp = player.getVisualComponent()) != null)
{
add(comp, BorderLayout.NORTH);
}
}
catch (Exception e)
{
e.printStackTrace();
}
接下来就是点击拍照,获取摄像头内的当前图像。
代码也是很简单:
private JButton capture;
private Buffer buf = null;
private BufferToImage btoi = null;
private ImagePanel imgpanel = null;
private Image img = null;
private ImagePanel imgpanel = null;
JComponent c = (JComponent) e.getSource();
if (c == capture)//如果按下的是拍照按钮
{
FrameGrabbingControl fgc =(FrameGrabbingControl) player.getControl
("javax.media.control.FrameGrabbingControl");
buf = fgc.grabFrame(); // 获取当前祯并存入Buffer类
btoi = new BufferToImage((VideoFormat) buf.getFormat());
img = btoi.createImage(buf); // show the image
imgpanel.setImage(img);
}
保存图像的就不多说了,以下为示例代码
BufferedImage bi = (BufferedImage) createImage(imgWidth, imgHeight);
Graphics2D g2 = bi.createGraphics();
g2.drawImage(img, null, null);
FileOutputStream out = null;
try
{
out = new FileOutputStream(s);
}
catch (java.io.FileNotFoundException io)
{
System.out.println("File Not Found");
}
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(1f, false);//不压缩图像
encoder.setJPEGEncodeParam(param);
try
{
encoder.encode(bi);
out.close();
}
catch (java.io.IOException io)
{
System.out.println("IOException");
}
已经申请将JWebCam建立为一个开源项目,放到GRO,大家发挥自己的想象力加入自己的代码吧,比如拍摄视
频,添加图像处理功能,等等。
分享到:
相关推荐
### Java中利用JMF编写摄像头拍照程序实例 #### 背景与介绍 在现代软件开发中,多媒体处理是一项非常重要的技术。Java Media Framework (JMF) 是Sun Microsystems推出的一个强大的多媒体开发框架,它允许开发者在...
总的来说,Java中利用JMF编写摄像头拍照程序是一项涉及多媒体处理、设备控制和图像处理技术的任务。尽管JMF有一定的学习曲线,但它仍然是理解Java多媒体编程的一个重要切入点。开发者需要熟悉JMF的API,理解如何查找...
在本文档中,我们探讨了如何在Java中利用Java Media Framework (JMF) 来创建一个简单的摄像头拍照程序。JMF 是一个用于处理媒体(如音频和视频)的框架,它允许开发者集成多媒体功能到Java应用程序中。 首先,你...
以上就是使用JMF在Java中编写摄像头拍照程序的基本步骤。需要注意的是,JMF可能对硬件和驱动有一定的依赖性,因此在不同环境下可能需要进行适配。此外,由于JMF已有一些年头未更新,可能存在兼容性和性能问题。在...
总的来说,Java利用JMF编写摄像头拍照程序涉及到的主要知识点有:JMF框架的使用,摄像头设备的管理和访问,视频帧的捕获,图像数据的转换以及文件的保存操作。虽然JMF已经过时,但理解这些基本概念对于学习其他...
在标题和描述中提到的“jmf架构的调用摄像头拍照的源码”,是指利用JMF来访问和控制摄像头,实现拍照功能的代码示例。 JMF的工作原理是通过注册不同的Media Players来处理特定格式的媒体数据。这些Media Players...
在“Java用JMF拍照”的主题下,我们将深入探讨如何在Windows 7环境下安装JMF,以及如何使用Java通过JMF来捕获摄像头图像。 首先,让我们了解JMF的安装过程: 1. **下载JMF**: 需要从Oracle官方网站或者第三方可靠...
Java调用摄像头拍照是计算机视觉应用中的一个常见需求,尤其在开发基于Web的应用时,例如视频会议、在线证件照拍摄等。本示例基于`webcam-capture`库,一个强大的Java库,允许开发者轻松地访问和控制电脑上的摄像头...
在Java编程语言中,开发摄像头拍照程序涉及到许多关键知识点,包括使用Java Media Framework (JMF) 或者 JavaFX,以及处理图像数据。以下是对这些核心概念的详细解释: 1. **Java Media Framework (JMF)**:JMF是...
在Java编程环境中,实现“基于Java图片裁剪+调用摄像头并裁剪头上上传”的功能,需要结合多个技术点。这个项目可能包含了图像处理、设备交互以及网络上传等多个环节。以下将详细介绍这些关键知识点: 1. 图像处理:...
在本项目中,我们关注的是一个使用Java编写的高清Webcam拍照程序,它不依赖于JMF(Java Media Framework)并且已经针对高清拍摄进行了优化,适用于普通的USB摄像头。以下是对这个项目的详细分析和相关知识点的阐述:...
Java 实现视频录制和拍照功能是一项常见的需求,尤其是在开发多媒体应用程序或者移动应用时。Java Media Framework (JMF) 是一个用于处理音频、视频和多播数据的平台,它为Java开发者提供了一套全面的框架来播放、...
在Java环境中,实现摄像头拍照功能可能需要用到Java Media Framework (JMF) 或 JavaFX,这两个库提供了访问和控制多媒体设备的能力,包括摄像头。开发者可以通过它们捕获摄像头的实时画面,并保存为图片文件(如...
比较简单”,意味着这个程序利用了Java Media Framework(JMF)来构建一个简易的拍照应用。JMF是一个开源的API,它提供了播放、捕获、记录和控制媒体的能力。在这个特定的应用中,用户能够通过程序拍摄照片,并将...
JavaMediaFramework(JMF)是Java平台上的一个多媒体编程框架,它为开发人员提供了一种在Java应用程序中处理音频和视频的能力。通过JMF,我们可以创建各种多媒体应用,包括网络摄像头编程,例如实现网络拍照功能。...
7. **多媒体库**:如果涉及到从摄像头拍照,可能需要用到第三方库,如`JMF (Java Media Framework)`或`LWJGL (Lightweight Java Game Library)`,这些库可以提供访问摄像头和捕获视频流的能力。 8. **文件I/O操作**...