视频监控(serverJFrame)

 

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(338310));
       
// 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;
    }


    
     
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值