⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webcamswing.java

📁 一个java小程序
💻 JAVA
字号:
import javax.swing.*;
import javax.imageio.ImageIO;
import javax.media.*;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;


public class WebCamSwing extends Applet implements ActionListener
{


	public static Player player = null;

	private CaptureDeviceInfo cdinfo = null;

	private MediaLocator medialocator = null;

	private ImagePanel imgpanel = null;

	private Buffer buf = null;

	private BufferToImage btoi = null;

	private int imgWidth = 320;

	private int imgHeight = 240;

	private Image img = null;

	/* 拍照按钮 */
	private JButton capture = null;

	private JButton save = null;

	/*
	 * 扩展部分 // 保存按钮 private JButton save = null;
	 * 
	 * //另存为按钮 private JButton saveas = null;
	 * 
	 * //删除按钮 private JButton delete = null;
	 */

	public WebCamSwing()
	{
		setLayout(new BorderLayout());

		imgpanel = new ImagePanel();
		setBounds(100, 100, 200, 200);
		capture = new JButton("拍照");
		capture.addActionListener(this);
		save = new JButton("保存");
		save.addActionListener(this);

		/*
		 * 拓展部分 save = new JButton("保存"); save.addActionListener(this); 

delete =
		 * new JButton("删除"); delete.addActionListener(this); saveas = new
		 * JButton("另存为"); saveas.addActionListener(this);
		 */

		String url = "vfw:Microsoft WDM Image Capture (Win32):0";
		cdinfo = CaptureDeviceManager.getDevice(url);
		medialocator = cdinfo.getLocator();
		try
		{
			player = Manager.createRealizedPlayer(medialocator);
			player.start();
			Component comp;
			if ((comp = player.getVisualComponent()) != null)
			{
				add(comp, BorderLayout.NORTH);
			}
			Panel panel = new Panel(new BorderLayout());
			panel.add(capture, BorderLayout.NORTH);
			panel.add(save, BorderLayout.SOUTH);
			add(panel, BorderLayout.CENTER);
			add(imgpanel, BorderLayout.SOUTH);

		} catch (Exception b)
		{
			b.printStackTrace();
		}
	}

	/* 点击拍照 */
	/*
	 * ActionEvent: 指示发生了组件定义的动作的语义事件。 当特定于组件的动作(比如

被按下)发生时, 由组件(比如
	 * Button)生成此高级别事件。 事件被传递给每一个 ActionListener 对象, 这些对

象是使用组件的
	 * addActionListener 方法注册的,用以接收这类事件。 注:要使用键盘在 Button 
上触发 ActionEvent,请使用空格键。
	 */
	public void actionPerformed(ActionEvent e)
	{
		JComponent c = (JComponent) e.getSource();
		if (c == capture)
		{
			// 使得FrameGrabbingControl控制player,支持player的类或接口。
			// getcontrol后括号里的是前面的要控制FrameGrabbingControl所在的类


			FrameGrabbingControl fgc = (FrameGrabbingControl) player
					.getControl

("javax.media.control.FrameGrabbingControl");
			buf = fgc.grabFrame();
			btoi = new BufferToImage((VideoFormat) buf.getFormat());
			img = btoi.createImage(buf);
			imgpanel.setImage(img); 

	
		}
		
		else if (c == save)
		{ 

		Frame f=new Frame("保存"); 
		FileDialog fd=new FileDialog(f,"保存文件",FileDialog.SAVE); 
		fd.setFile("*.JPEG"); 
		fd.setVisible(true); 
		String savepath=fd.getDirectory(); 
		String savename=fd.getFile(); 
		try
		{
			ImageIO.write((RenderedImage) img,"JPEG",   new File(savepath+savename));

		} catch (IOException e1)
		{
			// TODO 自动生成 catch 块
			e1.printStackTrace();
		}

		}	}


	class ImagePanel extends Panel
	{
		private Image ImagePanelimg = null;

		public ImagePanel()
		{
			setLayout(null);
			setSize(imgWidth, imgHeight);
		}

		public void setImage(Image img)
		{
			this.ImagePanelimg = img;
			repaint();
		}

		public void update(Graphics graphics)
		{
			if (ImagePanelimg != null)
			{
				graphics.drawImage(ImagePanelimg, 0, 0, this);
			}
		}
	}

	// 关闭摄像头
	public static void playerclose()
	{
		player.close();
		player.deallocate();
	}

	public static void main(String[] args)
	{
		Frame frame = new Frame("拍照程序");
		WebCamSwing cf = new WebCamSwing();
		frame.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				// playerclose();
				System.exit(0);
			}

		});
		frame.add("Center", cf);
		frame.pack();
		frame.setVisible(true);
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -