问题描述
原代码是这样:importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.awt.image.BufferedImage;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjavax.media.Buffer;importjavax.media.CannotRealizeException;importjavax.media.CaptureDeviceInfo;importjavax.media.CaptureDeviceManager;importjavax.media.Manager;importjavax.media.MediaLocator;importjavax.media.NoPlayerException;importjavax.media.Player;importjavax.media.control.FrameGrabbingControl;importjavax.media.format.VideoFormat;importjavax.media.util.BufferToImage;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importcom.sun.image.codec.jpeg.ImageFormatException;importcom.sun.image.codec.jpeg.JPEGCodec;importcom.sun.image.codec.jpeg.JPEGEncodeParam;importcom.sun.image.codec.jpeg.JPEGImageEncoder;publicclassFirstCaptureextendsJPanelimplementsActionListener{privateCaptureDeviceInfocaptureDeviceInfo=null;privateMediaLocatormediaLocator=null;privatestaticPlayerplayer=null;privateImagePanelimagePanel=null;privateJButtoncapture;privateBufferbuffer=null;privateVideoFormatvideoFormat=null;privateBufferToImagebufferToImage=null;privateImageimage=null;publicFirstCapture(){setLayout(newBorderLayout());setSize(320,550);Stringstr="vfw:MicrosoftWDMImageCapture(Win32):0";captureDeviceInfo=CaptureDeviceManager.getDevice(str);//取系统所有可采集的硬件设备列表mediaLocator=newMediaLocator("vfw://0");imagePanel=newImagePanel();capture=newJButton("拍照");capture.addActionListener(this);try{player=Manager.createRealizedPlayer(mediaLocator);player.start();Componentcomp;Componentcomp1;if((comp=player.getVisualComponent())!=null)add(comp,BorderLayout.NORTH);}catch(NoPlayerExceptione){e.printStackTrace();}catch(CannotRealizeExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}add(imagePanel,BorderLayout.SOUTH);add(capture,BorderLayout.CENTER);}publicvoidprint(Graphicsg){super.print(g);g.setColor(newColor(255,0,0));g.drawLine(0,0,100,100);}publicstaticvoidmain(String[]args){JFramef=newJFrame("FirstCapture");FirstCapturecf=newFirstCapture();f.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){player.close();System.exit(0);}});f.add("Center",cf);f.pack();f.setSize(newDimension(320,550));f.setVisible(true);}publicvoidactionPerformed(ActionEvente)//获取摄像头内的当前图像{FrameGrabbingControlfgc=(FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");buffer=fgc.grabFrame();bufferToImage=newBufferToImage((VideoFormat)buffer.getFormat());image=bufferToImage.createImage(buffer);imagePanel.setImage(image);saveImage(image,"D:/mofang.jpg");}publicstaticvoidsaveImage(Imageimage,Stringpath){BufferedImagebi=newBufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);Graphics2Dg2=bi.createGraphics();g2.drawImage(image,null,null);FileOutputStreamfos=null;try{fos=newFileOutputStream(path);}catch(FileNotFoundExceptione){e.printStackTrace();}JPEGImageEncoderje=JPEGCodec.createJPEGEncoder(fos);JPEGEncodeParamjp=je.getDefaultJPEGEncodeParam(bi);jp.setQuality(0.5f,false);je.setJPEGEncodeParam(jp);try{je.encode(bi);fos.close();}catch(ImageFormatExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}classImagePanelextendsPanel{publicImagemyimg=null;publicImagePanel(){setLayout(null);setSize(320,240);}publicvoidsetImage(Imageimg){this.myimg=img;repaint();}publicvoidpaint(Graphicsg){if(myimg!=null){g.drawImage(myimg,0,0,this);}}}}我要怎么样才能调用publicvoidactionPerformed(ActionEvente)函数,这个函数里面是否有拍照和保存图片功能?当程序运行时我要怎样才能实现拍照和保存?
解决方案
解决方案二:
记得资源库以前有置顶文章,楼主搜搜看了.