本来sun有个jmf组件可以很方便的实现摄像头截图的,不过这版本后来停止更新了,当前官网最新版本为Java Media Framework (JMF) 2.1.1e,下载回来,在windows 7 32位上使用,居然不能运行,网上另外找了个jmf的替代框架fmj使用,截图实现代码:
package com.pengo.capture;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.media.MediaLocator;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import net.sf.fmj.ui.application.CaptureDeviceBrowser;
import net.sf.fmj.ui.application.ContainerPlayer;
import net.sf.fmj.ui.application.PlayerPanelPrefs;
public class CameraFrame extends JFrame{
private static int num = 0;
public CameraFrame() throws Exception{
this.setTitle("摄像头截图应用");
this.setSize(480, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel cameraPanel = new JPanel();
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(cameraPanel, BorderLayout.CENTER);
ContainerPlayer containerPlayer = new ContainerPlayer(cameraPanel);
MediaLocator locator = CaptureDeviceBrowser.run(null); //弹出摄像头设备选择
// MediaLocator locator = null;
// GlobalCaptureDevicePlugger.addCaptureDevices();
// Vector vectorDevices = CaptureDeviceManager.getDeviceList(null);
// if (vectorDevices == null || vectorDevices.size() == 0)
// {
// System.out.println("没有摄像头===");
// return;
// }
// //选择第一个摄像头设备
// for ( int i = 0; i < vectorDevices.size(); i++ )
// {
// CaptureDeviceInfo infoCaptureDevice = (CaptureDeviceInfo) vectorDevices.get(i);
// System.out.println("设备名===============" + infoCaptureDevice.getName());
// //选择第一个设备为程序使用,如果存在多个设备时,则第一个可能不是摄像头
// locator = infoCaptureDevice.getLocator();
// break;
// }
PlayerPanelPrefs prefs = new PlayerPanelPrefs();
containerPlayer.setMediaLocation(locator.toExternalForm(), prefs.autoPlay);
JPanel btnPanel = new JPanel(new BorderLayout());
final JTextField path = new JTextField("E:\\camera");
path.setColumns(30);
btnPanel.add(path, BorderLayout.WEST);
JButton okBtn = new JButton("截图");
okBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Dimension imageSize = cameraPanel.getSize();
BufferedImage image = new BufferedImage(imageSize.width,
imageSize.height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
cameraPanel.paint(g);
g.dispose();
try {
String filePath = path.getText();
File file = new File(filePath);
if(file.exists() == false){
file.mkdirs();
}
ImageIO.write(image, "png", new File(file.getAbsolutePath() + "/" + num + ".png"));
num++;
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
btnPanel.add(okBtn, BorderLayout.EAST);
this.getContentPane().add(btnPanel, BorderLayout.SOUTH);
}
public static void main(String[] args) throws Exception{
CameraFrame camera = new CameraFrame();
camera.setVisible(true);
}
}
分享到:
相关推荐
Java 操作摄像头项目通常涉及到多媒体处理技术,尤其是视频流的捕获、编码和解码。在本项目中,核心库是 `xuggle-xuggler-5.4.jar`,这是一个强大的开源 Java 库,用于处理音视频数据。Xuggle 是 Xuggler 的一个分支...
在实际应用中,可能还需要处理权限问题,尤其是在macOS和一些现代操作系统上,用户需要给予应用访问摄像头的权限。此外,为了提供更好的用户体验,你可能需要创建一个GUI界面来显示摄像头预览,并添加拍照按钮。可以...
在Java编程环境中,实现摄像头截图是一项实用的功能,尤其在开发涉及多媒体处理的应用时。本文将深入探讨如何使用Java调用摄像头并实现截图功能。 首先,Java本身并不直接支持摄像头访问,但通过Java Media ...
标题中的“java调用大华摄像头”指的是使用Java编程语言编写代码,通过网络或者直接连接方式与大华摄像头建立联系,执行如视频流获取、图像抓取等操作。这可能涉及到TCP/IP通信协议、RTSP(Real Time Streaming ...
Java摄像头读取二维码是一项在物联网和移动应用中常见的技术,它允许通过摄像头捕获图像,然后解析其中的二维码信息。本项目提供了一个完整的Java解决方案,包括了必要的代码和配置,以便开发者可以快速理解和实现...
标题中的“基于海康sdk的java程序摄像头实时抓拍图片保存到本地”表明这是一个使用海康威视(Hikvision)提供的SDK进行Java编程的项目,目的是实现通过摄像头实时捕获图像并将其保存到本地计算机的功能。这个项目是...
可以通过添加鼠标监听器来实现对图像的操作,如选择截图区域等。 #### 功能实现 - **捕获图像**:点击 `capture` 按钮后,程序会将当前摄像头捕捉的画面保存到缓存中。 - **保存图像**:点击 `save` 按钮后,程序将...
Java提供了Java Media Framework (JMF) 和 OpenIMAJ 这样的库来访问和操作摄像头。JMF 是一种平台无关的框架,用于处理多种媒体类型,包括视频流。OpenIMAJ 是一个开源的Java库,特别适合于计算机视觉任务,如捕获...
为了实现远程操作,Java程序需要与摄像头建立网络连接。这可能涉及到TCP/IP、UDP或其他特定的通信协议。大华摄像头可能支持RTSP (Real-Time Streaming Protocol) 或ONVIF (Open Network Video Interface Forum) ...
在Java编程环境中,实现摄像头拍照是一项常见的功能,尤其在开发基于Web或桌面的应用程序时。这一功能涉及到多媒体处理、图像捕获以及用户交互等多个技术领域。以下是对这一主题的详细阐述: 1. **Java Media ...
"USB摄像头java实现"这个主题涉及的是如何通过编程,特别是使用Java语言,来控制和处理来自USB摄像头的视频流。以下是对这个主题的详细解释: 首先,我们需要理解Java如何与硬件设备进行交互。Java提供了一个名为...
在Java编程环境中,调用摄像头并进行实时视频处理或拍照是一项常见的需求,特别是在开发多媒体应用、视频监控系统或者在线会议软件时。本实例是关于如何使用Java调用摄像头的一个具体应用,通过集成Xuggler库来实现...
在"java jmf摄像头控件的运用"这个主题中,我们将深入探讨如何使用JMF来控制和操作摄像头。 首先,JMF允许开发者在Java应用程序中集成媒体播放、录制以及流媒体功能。它提供了对多种媒体格式的支持,并且可以通过...
JNI允许Java代码调用本地(C/C++)库,而libusb4java则提供了Java接口来操作USB设备,包括摄像头。 在USB摄像头采集过程中,我们需要识别并连接到USB摄像头设备。这通常涉及枚举USB总线上的设备,找到符合特定供应...
在这个项目中,Java通过OpenCV接口调用了本地摄像头,将捕获的视频流实时显示在Swing面板上,实现了摄像头的可视化操作。 Swing是Java的一个图形用户界面(GUI)工具包,用于构建桌面应用。**Swing Panel** 是Swing...
JNA(Java Native Access)是一个Java库,允许Java代码直接调用操作系统原生API,而无需编写C/C++的桥接代码。通过JNA,我们可以轻松地调用大华提供的DLL(动态链接库),这些库包含了与摄像头通信所需的各种函数。 ...
3. **摄像头API集成**:4G摄像头通常提供了自己的API或SDK,用于控制摄像头的参数设置、视频流获取等操作。Java程序需要集成这些API,通过调用相应的接口来获取实时视频流。 4. **流处理**:视频流是以字节流的形式...
Java版本的OpenCV允许开发者直接在Java代码中操作摄像头,进行图像捕获、处理和分析。 4. **Camera API 2**: 对于Android平台,Java可以利用Camera API 2,这是一个更现代且功能强大的接口,用于控制设备的相机。它...