正在装载数据…… import javax.swing.*; import java.io.*; import javax.media.*; import javax.media.format.*; import javax.media.util.*; import javax.media.control.*; import java.applet.Applet; import java.awt.*; import java.awt.image.*; import java.awt.event.*; import com.sun.image.codec.jpeg.*; public class WebCang extends JApplet implements ActionListener { public static Player player = null; private CaptureDeviceInfo di = null; private MediaLocator ml = null; /** * 瞻钮 */ private JButton capture = null; /** * 姘磁? */ private JButton save = null; private JTextField num = null; private Buffer buf = null; private Image img = null; //private VideoFormat vf = null; private BufferToImage btoi = null; private ImagePanel imgpanel = null; /** * 选取x,y,width,height默值 */ private int rectX; private int rectY; private int rectWidth = 150; private int rectHeight = 200; private int imgWidth = 320; private int imgHeight = 240; /** * 默媳募 */ private String fname = "test"; public WebCang() { setLayout(new BorderLayout()); setSize(320, 550); imgpanel = new ImagePanel(); imgpanel.addMouseMotionListener(imgpanel); capture = new JButton(""); capture.addActionListener(this); save = new JButton(""); save.addActionListener(this); num = new JTextField(); 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); } Panel panel1 = new Panel(new BorderLayout()); panel1.add(capture, BorderLayout.NORTH); panel1.add(new Label("应募:"), BorderLayout.WEST); panel1.add(num, BorderLayout.CENTER); panel1.add(save, BorderLayout.SOUTH); add(panel1, BorderLayout.CENTER); add(imgpanel, BorderLayout.SOUTH); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { JFrame f = new JFrame("--窕埃"); // Frame f = new Frame("殖粘 BCU WebCam Application"); WebCang cf = new WebCang(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { playerclose(); System.exit(0); } }); f.add("Center", cf); f.pack(); f.setSize(new Dimension(320, 590)); f.setVisible(true); } /** * 乇头 * */ public static void playerclose() { player.close(); player.deallocate(); } /** * */ public void actionPerformed(ActionEvent e) { JComponent c = (JComponent) e.getSource(); if (c == capture) { // Grab a frame FrameGrabbingControl fgc = (FrameGrabbingControl) player.getControl( "javax.media.control.FrameGrabbingControl"); buf = fgc.grabFrame(); // Convert it to an image btoi = new BufferToImage((VideoFormat) buf.getFormat()); img = btoi.createImage(buf); // show the image imgpanel.setImage(img); // save image } else if (c == save) { if (img != null) { fname = !num.getText().equals("") ? num.getText() : "test"; saveJPG(img, "Photo/" + fname + ".jpg"); } } } /** * 珊示片隙围选要取牟 */ class ImagePanel extends Panel implements MouseMotionListener { private Image myimg = null; public ImagePanel() { setLayout(null); setSize(imgWidth, imgHeight); } public void setImage(Image img) { this.myimg = img; repaint(); } public void update(Graphics g) { g.clearRect(0, 0, getWidth(), getHeight()); if (myimg != null) { g.drawImage(myimg, 0, 0, this); g.setColor(Color.RED); g.drawRect(rectX, rectY, rectWidth, rectHeight); } } public void paint(Graphics g) { update(g); } public void mouseDragged(MouseEvent e) { rectX = e.getX() - 50; rectY = e.getY() - 50; repaint(); } public void mouseMoved(MouseEvent e) { } } /** * 图 * @param img * @param s */ public void saveJPG(Image img, String s) { BufferedImage bi = (BufferedImage) createImage(imgWidth, imgHeight); /*BufferedImage bi = new BufferedImage( img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);*/ Graphics2D g2 = bi.createGraphics(); g2.clipRect(rectX, rectY, rectWidth, rectHeight); g2.drawImage(img, null, null); int moveX = rectX > 0 ? rectX : 0; int moveY = rectY > 0 ? rectY : 0; int cutWidth = rectX + rectWidth > imgWidth ? rectWidth - ((rectX + rectWidth) - imgWidth) : rectWidth; int cutHeight = rectY + rectHeight > imgHeight ? rectHeight - ((rectY + rectHeight) - imgHeight) : rectHeight; bi = bi.getSubimage(moveX, moveY, cutWidth, cutHeight); 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"); } } } 本文来源:http://blog.csdn.net/xwchen/archive/2007/09/11/1781311.aspx
|