日期:2014-05-20 浏览次数:20802 次
package com.xie.can; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import javax.media.Buffer; import javax.media.CaptureDeviceInfo; import javax.media.CaptureDeviceManager; import javax.media.Manager; import javax.media.MediaLocator; import javax.media.Player; import javax.media.control.FrameGrabbingControl; import javax.media.format.VideoFormat; import javax.media.util.BufferToImage; import javax.swing.JApplet; import javax.swing.JButton; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; class CanTest extends JApplet{ public static Player player = null; private CaptureDeviceInfo di = null; private MediaLocator ml = null; // 文档中提供的驱动写法,为何这么写我也不知:) public void init() { 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(); } } } class Pai { private JButton capture; private Buffer buf = null; private BufferToImage btoi = null; private ImagePanel imagpanel = null; private Image img = null; private ImagePanel imgpanel = null; public void pi() { // JComponent c = (JComponent) e.getSource(); // if (c == capture)//如果按下的是拍照按钮 // { imgpanel = new ImagePanel(); FrameGrabbingControl fgc =(FrameGrabbingControl)CanTest.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); // } } } class ImagePanel extends JApplet { public void setImage(Image img) { int imgWidth = 200 , imgHeight = 300; //BufferedImage bi = (BufferedImage)createImage(imgWidth, imgHeight); BufferedImage bi = new BufferedImage(800,600,BufferedImage.TYPE_INT_BGR); //System.out.println(bi); Graphics2D g2 = bi.createGraphics(); g2.drawImage(img, null, null); String s = "c:/1.jpg"; FileOutputStream out = null; try { out = new FileOutputStream(s); } catch (java.io.FileNotFoundException i) { 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"); } } } public class Main { public static void main(String[] args) { CanTest ct = new CanTest(); Pai p = new Pai(); ct.init(); p.pi(); } }