import java.io. * ; import java.text.SimpleDateFormat; import java.util. * ; import java.awt. * ; import java.awt.event. * ; import javax.swing. * ; import javax.media. * ; import javax.swing.border. * ; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import com.sun.image.codec.jpeg. * ; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import javax.media.util.BufferToImage; import javax.media.control.FrameGrabbingControl; import javax.imageio.stream.ImageOutputStream; import org.apache.crimson.tree.XmlDocument; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Text; /** */ /** * @(#)Jmf.java * * JFC Sample application * * @author * @version 1.00 06/04/24 */ public class v_ServerJFrame extends JFrame ... { Player player; CaptureDeviceInfo di; MediaLocator ml; //static int picCount; JPanel v_panel = null; static final int pic_Width = 176; static final int pic_Hight = 144; long times = 0; int px[] = new int[2]; int playerisOpen = 0; Component comp; timeSave bt = new timeSave(this); // UDPServer udpSer = null; /** *//** * The constructor. */ public v_ServerJFrame() ...{ JPanel ButtonGroup = new JPanel(); v_panel = new JPanel(); v_panel.setBackground(Color.GRAY); v_panel.setLayout(new FlowLayout()); v_panel.setBorder(new BevelBorder(BevelBorder.LOWERED)); getContentPane().add(BorderLayout.CENTER, v_panel); getContentPane().add(BorderLayout.SOUTH, ButtonGroup); setResizable(false); JButton StartButton = new JButton(); //JButton CaptureButton = new JButton(); JButton StopButton = new JButton(); //JButton SaveButton = new JButton(); JButton ExitButton = new JButton(); StartButton.setText("启动"); //CaptureButton.setText("Capture"); StopButton.setText("停止"); //SaveButton.setText("Save"); ExitButton.setText("退出"); ButtonGroup.add(BorderLayout.WEST, StartButton); // ButtonGroup.add(BorderLayout.WEST, CaptureButton); ButtonGroup.add(BorderLayout.WEST, StopButton); //ButtonGroup.add(BorderLayout.WEST, SaveButton); ButtonGroup.add(BorderLayout.WEST, ExitButton); //StartCapture(); StopButton.addActionListener ( new ActionListener() ...{ public void actionPerformed(ActionEvent e) ...{ //System.out.println(comp.getWidth()); //System.out.println(comp.getHeight()); //v_panel.repaint(); //new UDPServer().start(); /**//*for (int i=0;i<10;i++){ if (ps.ps[i] !=null) ps.ps[i].EXIT_FLAG =1; }*/ CloseCapture(); } } ); StartButton.addActionListener ( new ActionListener() ...{ public void actionPerformed(ActionEvent e) ...{ StartCapture(); } } ); /**//*SaveButton.addActionListener ( new ActionListener() { public void actionPerformed(ActionEvent e) { } } );*/ ExitButton.addActionListener ( new ActionListener() ...{ public void actionPerformed(ActionEvent e) ...{ CloseCapture(); v_ServerJFrame.this.windowClosed(); } } ); /**//*CaptureButton.addActionListener ( new ActionListener() { public void actionPerformed(ActionEvent e) { CaptureAction(); } } );*/ setTitle("v_ServerJFrame"); setSize(new Dimension(338, 310)); // setSize(new Dimension(128,128)); //StartCapture(); // Add window listener. this.addWindowListener ( new WindowAdapter() ...{ public void windowClosing(WindowEvent e) ...{ v_ServerJFrame.this.windowClosed(); } } ); } /** *//** * Shutdown procedure when run as an application. */ private void SavePicToFile(BufferedImage bi)...{ System.out.println("JPGFile is saving..."); FileOutputStream out = null; String ph; if (new File(AcceptMsg.picSavepath).exists()) ph = AcceptMsg.picSavepath + "/"; else ph = System.getProperty("user.dir") + "/pic/" ; SimpleDateFormat dateformt=new SimpleDateFormat("yyyyMMddHHmmss"); Date now = new Date(); String s = dateformt.format(now); ph += "xwy" + s + ".jpg"; try ...{ out = new FileOutputStream(ph); } 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); System.out.println("JPGFile is saved!"); try ...{ encoder.encode(bi); out.close(); } catch (java.io.IOException io) ...{ System.out.println("IOException"); } }// ---------------------------------------------------------------- private void writeXMLFile(String outFile) ...{ // 为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = null; try ...{ db = dbf.newDocumentBuilder(); } catch (ParserConfigurationException pce) ...{ System.err.println(pce); System.exit(1); } Document doc = null; doc = db.newDocument(); String ph; if (new File(AcceptMsg.picSavepath).exists()) ph = AcceptMsg.picSavepath; else ph = System.getProperty("user.dir") + "/pic" ; String fn[] = getFilelist(ph); Element root = doc.createElement("files"); // 根元素添加上文档 doc.appendChild(root); for (int i = 0; i < fn.length;i++)...{ Element file = doc.createElement("file"); root.appendChild(file); Element fname = doc.createElement("fname"); file.appendChild(fname); Text tName = doc.createTextNode(fn[i]); fname.appendChild(tName); } // 把XML文档输出到指定的文件 try...{ FileOutputStream outStream = new FileOutputStream(outFile); OutputStreamWriter outWriter = new OutputStreamWriter(outStream); ((XmlDocument) doc).write(outWriter, "GB2312"); outWriter.close(); outStream.close(); }catch(Exception e)...{System.err.println(e.getMessage()); } } //---------------------------------------------------------------- public String[] getFilelist(String dn)...{ File dir = new File(dn); //String[] cd = dir.list(); FilenameFilter filter = new FilenameFilter()...{ public boolean accept(File dir,String name)...{ return !name.startsWith("."); } }; return dir.list(filter); }// ---------------------------------------------------------------- protected void windowClosed() ...{ // TODO: Check if it is safe to close the application // Exit application. //--设置消息接受线程的退出标志 CloseCapture(); System.exit(0); } public void CloseCapture()...{ if (player !=null) ...{ playerisOpen = 0; player.close(); player = null; comp.setVisible(false); bt.coseTimer(); System.out.println("关闭摄像头!"); } } public void StartCapture() ...{ if (player != null) return ; System.out.println("正在打开摄像头....."); //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(); if ((comp = player.getVisualComponent()) != null) ...{ //this.add(comp, BorderLayout.CENTER); comp.setSize(v_panel.getWidth()-1,v_panel.getHeight()-1); v_panel.add(comp, BorderLayout.CENTER); playerisOpen = 1; System.out.println("摄像头已打开!"); bt.setTimer(); } } catch (Exception e) ...{ e.printStackTrace(); } } //---------------------------------------------- public boolean picCompare(int sz)...{ if (px[0] == 0)...{ px[0] = sz; // System.out.println("px = 0"); }else...{ px[1] = sz; //System.out.println("px1 - px2 = " + Math.abs(px[1] - px [0])); if (Math.abs(px[1] - px [0]) >100 )...{ px[0] = px[1] = 0; return true;//如果图像有变动保存图像 } } return false; } //---------------------------------------------- public byte[] CaptureAction()...{ Buffer buf = null; BufferToImage btoi = null; Image img = null; byte[] imgd = null; // javax.swing.JComponent c = (JComponent) e.getSource(); //if (c == capture){//如果按下的是拍照按钮 FrameGrabbingControl fgc = (FrameGrabbingControl) player.getControl( "javax.media.control.FrameGrabbingControl"); buf = fgc.grabFrame(); // 获取当前祯并存入Buffer类 btoi = new BufferToImage((javax.media.format.VideoFormat) buf.getFormat()); img = btoi.createImage(buf); // show the image ImageIcon ii = new ImageIcon(img); int imgW = img.getWidth(ii.getImageObserver()); int imgH = img.getHeight(ii.getImageObserver()); BufferedImage bi = (BufferedImage) createImage(160,120); Graphics2D g2 = bi.createGraphics(); //g2.drawImage(img,null,null); g2.drawImage(img,0,0,160,120,Color.white,ii.getImageObserver()); //System.out.println(buf.getLength()); ByteArrayOutputStream bs = new ByteArrayOutputStream(); try ...{ ImageOutputStream imOut = ImageIO.createImageOutputStream(bs); ImageIO.write(bi, "jpg", imOut); //scaledImage1为BufferedImage,jpg为图像的类型 InputStream is = new ByteArrayInputStream(bs.toByteArray()); imgd = new byte[UDPServer.P_SIZE]; //imgd = new byte[bs.size()]; //System.out.println("图像数据缓冲区:"+String.valueOf(bs.size())); is.read(imgd); if (picCompare(bs.size()))...{ //---隔1分钟保存视频图像 //if (times % AcceptMsg.tt == 0 ) //--将视频图像以JPG格式保存 SavePicToFile(bi); //---隔5分钟重写XML文件 //if (times % AcceptMsg.tt * 4 == 0) { System.out.println("begin to write Output.xml file"); writeXMLFile("Output.xml"); System.out.println("XML is saved!"); // } times ++; } //ImageIcon imageicon = new ImageIcon(imgd) ; /**//*picFrame picFrame1 = new picFrame(imageicon,picCount++); // Show frame. picFrame1.setVisible(true);*/ } catch (Exception e) ...{ System.out.println(e.getMessage()); } return imgd; } }