 
 
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing.Imaging;using System.Text;using System.Windows;using System.Windows.Forms;using System.IO;using System.Windows.Media.Imaging;using AForge;using AForge.Controls;using AForge.Video;using AForge.Video.DirectShow;using Size = System.Drawing.Size;using System.Drawing;using System.Linq;using System.IO.Ports;using Emgu.CV;using Emgu.CV.Structure;using JoyKeys;using Microsoft.Win32;   using System.Runtime.InteropServices;using System.Diagnostics;using System.Threading;using JoyKeys.Voluntary;namespace OperateCamera{  public partial class Form1 : Form  {    Thread[] workThreads = new Thread[10];    static int lx, ly, lrt, lrb_xyab = 0, lxy = 65535, rx, ry;    static int lx_mid = 0, ly_mid = 0, rx_mid = 0, ry_mid = 0, lrt_mid = 0;    static string s;    /// <summary>    /// 手柄定义    static string sxdy;    static string xyba;    static string diretion;        /// </summary>    static bool joy = false;    static bool joyInit = false;    private const int statLength = 15;    private int statIndex = 0;    private int statReady = 0;    private int[] statCount = new int[statLength];    int time1 = 0;    static byte[] SendBytes = new byte[24];    int count;//用于定时器计数    int time;//存储设定的定时值    //device 1    const byte DeviceOpen1 = 0x01;    const byte DeviceClose1 = 0x81;    //device 2    const byte DeviceOpen2 = 0x02;    const byte DeviceClose2 = 0x82;    //device 3    const byte DeviceOpen3 = 0x03;    const byte DeviceClose3 = 0x83;    //device 4    const byte DeviceOpen4 = 0x04;    const byte DeviceClose4 = 0x84;    //SerialPort Write Buffer    bool Button1Statue;    byte[] SerialPortDataBuffer = new byte[1];    private FilterInfoCollection videoDevices;    //private VideoCaptureDevice videoSource;    public Form1()    {      workThreads[0] = new Thread(new ThreadStart(joystic));      workThreads[0].Name = "t0";      workThreads[0].Start();      workThreads[0].IsBackground = true;      InitializeComponent();      System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;    }    public static void joystic()    {      int x = 0;      JoystickAPI.JOYINFOEX infoEx = new JoystickAPI.JOYINFOEX();      while (true)      {        infoEx.dwSize = Marshal.SizeOf(typeof(JoystickAPI.JOYINFOEX));        infoEx.dwFlags = (int)JoystickAPI.JOY_RETURNBUTTONS;        JoystickAPI.joyGetPosEx(JoystickAPI.JOYSTICKID1, ref infoEx);        int A = infoEx.dwButtonNumber;        lx = infoEx.dwXpos / 3200;        ly = infoEx.dwYpos / 3200;        lrt = infoEx.dwZpos/3200;        lrb_xyab = infoEx.dwButtons;        rx = infoEx.dwUpos;        ry = infoEx.dwRpos / 3200;        lxy = infoEx.dwPOV;        s = infoEx.dwXpos.ToString()  "\t"   //左摇杆 左右              infoEx.dwYpos.ToString()  "\r\n"  //左摇杆 上下              infoEx.dwZpos.ToString()  "\t"   //LT RT              infoEx.dwButtons.ToString()  "\r\n" //A B X Y LB RB back start              infoEx.dwUpos.ToString()  "\t"   //右摇杆 左右              infoEx.dwRpos.ToString()  "\r\n"  //右摇杆 上下infoEx.dwPOV.ToString();//上下左右        sxdy = infoEx.dwPOV.ToString();//上下左右        xyba = infoEx.dwButtons.ToString();//A B X Y LB RB back start        diretion = lx.ToString()  "\t"   //左摇杆 左右              ly.ToString()  "\r\n"  //左摇杆 上下              lrt.ToString()  "\t"   //右摇杆 左右              ry.ToString()  "\r\n"; //右摇杆 上下  if ((lrb_xyab & 0x80) != 0)        {          joyInit = false;        }        if ((lx  ly  rx  ry) == 0)        {          joy = false;        }        else        {          joy = true;        }        if (joyInit == false && joy == true)        {          lx_mid = infoEx.dwXpos / 3200;          ly_mid = infoEx.dwYpos / 3200;          lrt_mid = infoEx.dwZpos / 3200;          rx_mid = infoEx.dwUpos;          ry_mid = infoEx.dwRpos / 3200;          joyInit = true;        }      }    }    private void Form1_Load(object sender, EventArgs e)    {            SearchAndAddSerialToComboBox(serialPort1, comboBox1);      serialPort1.DataReceived = new SerialDataReceivedEventHandler(port_DataReceived);//必须手动添加事件处理程序    }    private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)//串口数据接收事件    {    }        private void WriteByteToSerialPort(byte data)          //单字节写入串口    {    }    private void SearchAndAddSerialToComboBox(SerialPort MyPort, ComboBox MyBox)    {  //将可用端口号添加到ComboBox      string[] MyString = new string[20];             //最多容纳20个,太多会影响调试效率      string Buffer;        //缓存      MyBox.Items.Clear();     //清空ComboBox内容      for (int i = 1; i < 20; i ) //循环      {        try            //核心原理是依靠try和catch完成遍历        {          Buffer = "COM"  i.ToString();          MyPort.PortName = Buffer;          MyPort.Open();    //如果失败,后面的代码不会执行          MyString[i - 1] = Buffer;          MyBox.Items.Add(Buffer);              //打开成功,添加至下俩列表          MyPort.Close();    //关闭        }        catch        {        }      }      MyBox.Text = MyString[0];   //初始化    }    private void btnConnect_Click(object sender, EventArgs e)    {      CameraConn();          }    //连接摄像头    private void CameraConn()    {    }    private void CameraConn1()    {    }    //关闭摄像头    private void btnClose_Click(object sender, EventArgs e)    {      videoSourcePlayer.SignalToStop();      videoSourcePlayer.WaitForStop();    }    //主窗体关闭    private void Form1_FormClosing(object sender, FormClosingEventArgs e)    {      btnClose_Click(null, null);    }    //拍照    private void Photograph_Click(object sender, EventArgs e)    {    }    private string GetImagePath()    {      string personImgPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory)              Path.DirectorySeparatorChar.ToString()  "PersonImg";      if (!Directory.Exists(personImgPath))      {        Directory.CreateDirectory(personImgPath);      }      return personImgPath;    }    private void videoSourcePlayer_Click(object sender, EventArgs e)    {    }    private void groupBox6_Enter(object sender, EventArgs e)    {    }    private void button1_Click(object sender, EventArgs e)    {      if (serialPort1.IsOpen)    //串口打开就关闭      {        try        {          serialPort1.Close();        }        catch { }         //确保万无一失        //button1.Text = "打开串口";        button1.BackgroundImage = Properties.Resources.Image2; //灭        Button1Statue = false;  //按钮状态      }      else      {        try        {          serialPort1.PortName = comboBox1.Text;       //端口号          serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text, 10);//十进制数据转换          serialPort1.Open();  //打开端口          //button1.Text = "关闭串口";          button1.BackgroundImage = Properties.Resources.Image1;//亮          Button1Statue = true; //按钮状态        }        catch        {          MessageBox.Show("串口打开失败", "错误");        }      }    }    private void button1_MouseHover(object sender, EventArgs e)    {      button1.BackgroundImage = Properties.Resources.Image3;//鼠标指上去则使用Image3    }    private void button1_MouseLeave(object sender, EventArgs e)    {      if (Button1Statue)   //鼠标移开,返回原来状态      {        button1.BackgroundImage = Properties.Resources.Image1;      }      else      {        button1.BackgroundImage = Properties.Resources.Image2;      }    }    private void button2_Click(object sender, EventArgs e)    {      int i = 0;      try      {        i = Convert.ToInt32(textBox1.Text.Substring(0, 2));  //先处理两位数,如果出错就处理一位数      }      catch      {        try        {          i = Convert.ToInt32(textBox1.Text.Substring(0, 1));//处理一位数        }        catch        {          MessageBox.Show("请输入正确的数字");       //错误提示          return;       //退出函数        }      }      if (serialPort1.IsOpen)  //避免定时器浪费时间和用户等待      {        if (i == 0)      //如果是0的话程序认为是定时模式关        {          //MessageBox.Show("请输入大于0的数字","提示");//WriteByteToSerialPort(DeviceOpen1);          return;        }        else        {          progressBar1.Value = 0;          WriteByteToSerialPort(DeviceOpen1);          //timer1.Interval = i * 1000;           //可以这样写,不需要计数器          time = i;//得到设定定时值(整形)          progressBar1.Maximum = time;//进度条最大数值          timer1.Start();  //开定时器          button2.Enabled = false;            //开按钮不能按了…        }      }    }    private void button3_Click(object sender, EventArgs e)    {      try      {        timer1.Stop();   //如果定时器没开,则错误处理      }      catch      {      }      button2.Enabled = true;      progressBar1.Value = 0;      WriteByteToSerialPort(DeviceClose1);             //器件一关      count = 0;    }    private void button5_Click(object sender, EventArgs e)    {      WriteByteToSerialPort(DeviceOpen2);             //器件二开    }    private void button4_Click(object sender, EventArgs e)    {      WriteByteToSerialPort(DeviceClose2);            //器件二关    }    private void button7_Click(object sender, EventArgs e)    {      WriteByteToSerialPort(DeviceOpen3);             //器件三开    }    private void button6_Click(object sender, EventArgs e)    {      WriteByteToSerialPort(DeviceClose3);            //器件三关    }    private void button8_Click(object sender, EventArgs e)    {      SearchAndAddSerialToComboBox(serialPort1, comboBox1);    //扫描并讲课用串口添加至下拉列表    }    private void timer1_Tick(object sender, EventArgs e)    {      count ;//记当前秒      progressBar1.Value = count;//设置进度条进度      if (count == time)      {        button2.Enabled = true;    //开按钮可以按        timer1.Stop();//时间到,停止计时        WriteByteToSerialPort(DeviceClose1);             //器件一关        count = 0;      }    }        private void button11_Click(object sender, EventArgs e)    {    }    private void button10_Click(object sender, EventArgs e)    {          }    private void button9_Click(object sender, EventArgs e)    {          }    private void tscbxCameras_SelectedIndexChanged(object sender, EventArgs e)    {    }    private void btnConnect1_Click(object sender, EventArgs e)    {      CameraConn1();    }    private void btnClose1_Click(object sender, EventArgs e)    {    }    private void button12_Click(object sender, EventArgs e)    {    }    private void button14_Click(object sender, EventArgs e)    {//放大    }    private void button15_Click(object sender, EventArgs e)    { //放大          }    private void button16_Click(object sender, EventArgs e)    {    }    private void button17_Click(object sender, EventArgs e)    {    }    private void button17_Click_1(object sender, EventArgs e)    {          }    private void button13_Click(object sender, EventArgs e)    {    }    private void button18_Click(object sender, EventArgs e)    {    }    private void P1_ValueChanged(object sender, EventArgs e)    {    }    private void timer2_Tick(object sender, EventArgs e)    {    }    private void button9_Click_1(object sender, EventArgs e)    {      SendAndTextAdd(SendBytes, SendBytes.Length);    }    private void SendAndTextAdd(byte[] SendBytes, int SendByteLenth)    {          }    private string ReceiveByteToHexArray(byte[] b, int len)//服务函数,十六进制显示    {      int i = 0;      byte[] a = new byte[len * 3];      for (i = 0; i < len; i )      {        if (b[i] / 16 < 10)        {          a[i * 3] = Convert.ToByte(b[i] / 16  48);        }        else        {          a[i * 3] = Convert.ToByte(b[i] / 16  55);        }        if (b[i] % 16 < 10)        {          a[i * 3  1] = Convert.ToByte(b[i] % 16  48);        }        else        {          a[i * 3  1] = Convert.ToByte(b[i] % 16  55);        }        a[i * 3  2] = 32;      }      return System.Text.Encoding.ASCII.GetString(a);    }    private void Form1_KeyDown(object sender, KeyEventArgs e)//快捷键检测    {    }    private void Form1_KeyUp(object sender, KeyEventArgs e)//按键弹开,执行对应动作    {    }    private void groupBox5_Enter(object sender, EventArgs e)    {    }    private void button10_Click_1(object sender, EventArgs e)    {      MJPEGStream mjpegSource = new MJPEGStream(textBox4.Text "?action=stream");        OpenVideoSource(mjpegSource);    }    private void OpenVideoSource(IVideoSource source)    {      this.Cursor = Cursors.WaitCursor;      videoSourcePlayer.SignalToStop();      videoSourcePlayer.WaitForStop();      videoSourcePlayer.VideoSource = source;      videoSourcePlayer.Start();      statIndex = statReady = 0;      timer.Start();      this.Cursor = Cursors.Default;    }    private void OpenVideoSource1(IVideoSource source)    {      this.Cursor = Cursors.WaitCursor;      videoSourcePlayer1.SignalToStop();      videoSourcePlayer1.WaitForStop();      videoSourcePlayer1.VideoSource = source;      videoSourcePlayer1.Start();      statIndex = statReady = 0;      timer.Start();      this.Cursor = Cursors.Default;    }    private void timer_Tick(object sender, EventArgs e)    {      IVideoSource videoSource = videoSourcePlayer.VideoSource;      if (videoSource != null)      {        statCount[statIndex] = videoSource.FramesReceived;        if ( statIndex >= statLength)          statIndex = 0;        if (statReady < statLength)          statReady ;        float fps = 0;        for (int i = 0; i < statReady; i )        {          fps = statCount[i];        }        fps /= statReady;        statCount[statIndex] = 0;              }    }    private void button19_Click(object sender, EventArgs e)    {      try      {        if (videoSourcePlayer.IsRunning)        {          string picName1 = GetImagePath()  "\\"  "wu1"  ".jpg";          this.pictureBox3.Load(picName1);//加载图片          BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(   videoSourcePlayer.GetCurrentVideoFrame().GetHbitmap(),   IntPtr.Zero,    Int32Rect.Empty,   BitmapSizeOptions.FromEmptyOptions());          PngBitmapEncoder pE = new PngBitmapEncoder();          pE.Frames.Add(BitmapFrame.Create(bitmapSource));          string picName = GetImagePath()  "\\"  "3"  ".jpg";          if (File.Exists(picName))          {            File.Delete(picName);          }          using (Stream stream = File.Create(picName))          {            pE.Save(stream);          }          //拍照完成后关摄像头并刷新同时关窗体          //if (videoSourcePlayer != null && videoSourcePlayer.IsRunning)          //{          //  videoSourcePlayer.SignalToStop();          // videoSourcePlayer.WaitForStop();          //}          //this.Close();          this.pictureBox3.Load(picName);//加载图片        }      }      catch (Exception ex)      {        MessageBox.Show("摄像头异常:"  ex.Message);      }    }    private void button20_Click(object sender, EventArgs e)    {      videoSourcePlayer.SignalToStop();      videoSourcePlayer.WaitForStop();          }    private void textBox5_TextChanged(object sender, EventArgs e)    {    }    private void button13_Click_1(object sender, EventArgs e)    {      MJPEGStream mjpegSource = new MJPEGStream(textBox2.Text "?action=stream");      OpenVideoSource1(mjpegSource);    }    private void button14_Click_1(object sender, EventArgs e)    {      try      {        if (videoSourcePlayer1.IsRunning)        {          string picName1 = GetImagePath()  "\\"  "wu2"  ".jpg";          this.pictureBox1.Load(picName1);//加载图片          BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(   videoSourcePlayer1.GetCurrentVideoFrame().GetHbitmap(),   IntPtr.Zero,    Int32Rect.Empty,   BitmapSizeOptions.FromEmptyOptions());          PngBitmapEncoder pE = new PngBitmapEncoder();          pE.Frames.Add(BitmapFrame.Create(bitmapSource));          string picName = GetImagePath()  "\\"  "2"  ".jpg";          if (File.Exists(picName))          {            File.Delete(picName);          }          using (Stream stream = File.Create(picName))          {            pE.Save(stream);          }          //拍照完成后关摄像头并刷新同时关窗体          //if (videoSourcePlayer != null && videoSourcePlayer.IsRunning)          //{          //  videoSourcePlayer.SignalToStop();          // videoSourcePlayer.WaitForStop();          //}          //this.Close();          this.pictureBox1.Load(picName);//加载图片        }      }      catch (Exception ex)      {        MessageBox.Show("摄像头异常:"  ex.Message);      }    }    private void button15_Click_1(object sender, EventArgs e)    {      videoSourcePlayer1.SignalToStop();      videoSourcePlayer1.WaitForStop();    }    private void button23_Click(object sender, EventArgs e)    {    }      }}

 
  
					
				
评论