微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight之摄像头使用

  摄像头使用: 摄像头捕获动态图形的基本设计过程:     ①获取摄像设备     ②设置捕获源对象     ③设置视频刷     ④填充矩形显示 添加引用 using System.Windows.Media.Imaging;  using System.IO; public VideoCaptureDevice camera;  //定义摄像设备 public CaptureSource capturesource=new CaptureSource(); public VideoBrush videoBrush=new VideoBrush(); //启动摄像头 private void Action(){         StartCamera();         //如果允许启动获取的摄像头         if(CaptureDeviceConfigurati on.RequestDeviceAccess()){                   //启动摄像头                   capturesource.Start();         } } private void StartCamera(){         VideoCaptureDevice cameradevice=CaptureDeviceConfigurati on.GetDefaultVideoCaptureDe vice();         //如果没有配置摄像头         if(cameradevice==null){                 //信息提示         }else{               camera=CaptureDeviceConfigurati on.GetDefaultVideoCaptureDe vice();               //设置捕获源对象设置为摄像头               capturesource.VideoCaptureDevice=camera;               //设置视频刷源               videoBrush.SetSource(capturesource);               //利用视频刷填充矩形对象               this.rectangle.Fill=videoBrush;    //xaml页面创建容器         } } //截取静态图片 private void Cutimage(){       this.capturesource.CaptureImageAsync();       this.capturesource.CaptureImageCompleted+=(ss,se)=>       {             if(se.Error==null){                   this.image.source=se.Result;                   //定义位图对象                   WriteableBitmap bitmap=se.Result;                   Image image=new Image();                   image.Width=160;                   image.Stretch=Stretch.Fill;                   //设置Image对象源,显示图形                   image.source=bitmap;                   this.listBox.Items.Add(image);             }else{                   return;             }       } } //保存图片 private void SaveImage(){         //创建对象,源来自image         WriteableBitmap bitmap=new WriteableBitmap(image,null);         //保存文件         if(bitmap!=null){                 SaveFileDialog saveJPEG=new SaveFileDialog();                 saveJPEG.Filter="JPEG Files (*.jpeg)|*.jpeg";                 if(saveJPEG.ShowDialog().Value){                       using(Stream jpegstram=saveJPEG.OpenFile()){                               SavetoJPEGFile(bitmap,jpegstream);                     }                 }         } } private void SavetoJPEGFile(WriteableBitmap bitmap,Stram jpegstream){     //获取image信息     int width=bitmap.PixelWidth;     int height=bitmap.PixelHeight;     int unitrow=3;     byte[][,] lattice=new byte[unitrow][,];     建立图形区     for(int i=0; i<unitrow; i++){             lattice[i]=new byte[width,height];   }     for(int row=0;row<height;row++){           for(int column=0;column<width; column++){                 int pixel=bitmap.Pixels[width*row+column];                 lattice[0][column,row]=(byte(pixel>>16));                 lattice[1][column,row]=(byte(pixel>>8));                 lattice[2][column,row]=(byte)pixel;         }   }   //应用FJ.Core.dll中的类处理  色彩处理       FluxJpeg.Core.ColorModel colormodel=new FluxJpeg.Core.ColorModel{             colorspace=FluxJpeg.Core.ColorSpace.RGB       };       FluxJpeg.Core.Image image2=new FluxJpeg.Core.Image(colormodel,lattice);       //将image2编码为JPEG       MemoryStream stram=new MemoryStram();       FluxJpeg.Core.Encoder.JpegEncoder jpegencoder=new FluxJpeg.Core.Encoder.JpegEncoder(image2,100,stram);       jpegencoder.Encode();       //回到stram的初始位置       stream.Seek(0,SeekOrgin.Begin);       //定义缓存区       byte[] buffer=new Byte[stream.Length];       //获取jpeg数据流,读入缓存       long bytesRead=stream.Read(buffer,(int)stream.Length);       //写入文件流       jpegstream.Write(buffer,buffer.Length);  } //关闭摄像头 private void Close(){   capturesource.Stop();   this.rectangle.Fill=null; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐