 
 
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.Configuration;using System.Drawing;using System.Drawing.Drawing2D;namespace OperateCamera{  public partial class Form1 : Form  {    private FilterInfoCollection videoDevices;    private VideoCaptureDevice videoSource;    public Form1()    {      InitializeComponent();    }    private void Form1_Load(object sender, EventArgs e)    {      try      {        // 枚举所有视频输入设备        videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);        if (videoDevices.Count == 0)          throw new ApplicationException();        foreach (FilterInfo device in videoDevices)        {          tscbxCameras.Items.Add(device.Name);        }        tscbxCameras.SelectedIndex = 0;      }      catch (ApplicationException)      {        tscbxCameras.Items.Add("No local capture devices");        videoDevices = null;      }    }    private void btnConnect_Click(object sender, EventArgs e)    {      CameraConn();    }    //连接摄像头    private void CameraConn()    {      videoSourcePlayer.SignalToStop();      videoSourcePlayer.WaitForStop();      VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedIndex].MonikerString);      videoSource.DesiredFrameSize = new System.Drawing.Size(1280, 1024);      videoSource.DesiredFrameRate = 1;      videoSourcePlayer.VideoSource = videoSource;      videoSourcePlayer.Start();    }    //关闭摄像头    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)    {      try      {        if (videoSourcePlayer.IsRunning)        {          BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(   videoSourcePlayer.GetCurrentVideoFrame().GetHbitmap(),   IntPtr.Zero,   Int32Rect.Empty,   BitmapSizeOptions.FromEmptyOptions());//          PngBitmapEncoder pE = new PngBitmapEncoder();          BitmapFrame bitmap = BitmapFrame.Create(bitmapSource);          pE.Frames.Add(bitmap);          string fileName = DateTime.Now.ToString("yyyyMMddHHmmss")  "_1";          string fileSaveName = DateTime.Now.ToString("yyyyMMddHHmmss");          string picName = GetImagePath()  "\\"  fileName  ".jpg";          string saveName = GetImagePath()  "\\"  fileSaveName  ".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();          //}           GetThumbnail(picName, saveName, 1920, 1080);    }      }      catch (Exception ex)      {        MessageBox.Show("摄像头异常:"  ex.Message);      }    }    //文件存储路径    private string GetImagePath()    {      AppSettingsReader reader = new AppSettingsReader();      string strServer = reader.GetValue("ServerPath", typeof(string)).ToString();      //string personImgPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory)      //        Path.DirectorySeparatorChar.ToString()  "PersonImg";      string personImgPath = "\\\\"  strServer  "\\upload";      if (!Directory.Exists(personImgPath))      {        Directory.CreateDirectory(personImgPath);      }      return personImgPath;    }    /// <summary>     /// 生成缩略图     /// </summary>     /// <param name="serverImagePath">图片地址</param>     /// <param name="thumbnailImagePath">缩略图地址</param>     /// <param name="width">图片宽度</param>     /// <param name="height">图片高度</param>     /// <param name="p"></param>     public static bool GetThumbnail(string serverImagePath, string thumbnailImagePath, int width, int height)    {      System.Drawing.Image serverImage = System.Drawing.Image.FromFile(serverImagePath);      //画板大小       int towidth = width;      int toheight = height;      //缩略图矩形框的像素点       int x = 0;      int y = 0;      int ow = serverImage.Width;      int oh = serverImage.Height;      if (ow > oh)      {        toheight = serverImage.Height * width / serverImage.Width;      }      else      {        towidth = serverImage.Width * height / serverImage.Height;      }      //新建一个bmp图片       System.Drawing.Image bm = new System.Drawing.Bitmap(width, height);      //新建一个画板       System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bm);      //设置高质量插值法       g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;      //设置高质量,低速度呈现平滑程度       g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;      //清空画布并以透明背景色填充       g.Clear(System.Drawing.Color.White);      //在指定位置并且按指定大小绘制原图片的指定部分       g.DrawImage(serverImage, new System.Drawing.Rectangle((width - towidth) / 2, (height - toheight) / 2, towidth, toheight),        0, 0, ow, oh, System.Drawing.GraphicsUnit.Pixel);      try      {        //以jpg格式保存缩略图         bm.Save(thumbnailImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);        serverImage.Dispose();        bm.Dispose();        g.Dispose();        //删除原图        File.Delete(serverImagePath);        return true;      }      catch (System.Exception e)      {        return false;        throw e;      }      finally      {        serverImage.Dispose();        bm.Dispose();        g.Dispose();      }    }//    /// <summary> //    /// 从视频中截取图片,调用GetNewImage方法,自定义图片大小,返回Bitmap格式图片//    /// </summary> //    /// <returns></returns> //    private Bitmap GetImage()//    {//     Bitmap bitmap;//      try//      {//        CameraForm.SendMessage(this.hHwnd, 0x41e, 0, 0);//        System.Windows.IDataObject obj1 = System.Windows.Clipboard.GetDataObject();//        if (obj1.GetDataPresent(typeof(Bitmap)))//        {//          bitmap= (Bitmap)obj1.GetData(typeof(Bitmap));//          GetNewImage(bitmap, 300, 300);//自定图片大小//        }//}//      catch//      {//}//   return bitmap;//    }//    /// <summary> //    /// 对图片进行处理,返回一个Image类别的对象 //    /// </summary> //    /// <param name="oldImgPath">原图片路径</param> //    /// <param name="newWidth">新图片宽度</param> //    /// <param name="newHeight">新图片高度</param> //    /// <returns></returns> //    private Image GetNewImage(Bitmap bmap, int newWidth, int newHeight)//    {//      Image oldImg = bmap;//      Image newImg = oldImg.GetThumbnailImage(newWidth, newHeight, new Image.GetThumbnailImageAbort(IsTrue), IntPtr.Zero); // 对原图片进行缩放 //      return newImg;//    }  } }

 
  
					
				
评论