摄像头使用: 摄像头捕获动态图形的基本设计过程: ①获取摄像设备 ②设置捕获源对象 ③设置视频刷 ④填充矩形显示 添加引用 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] 举报,一经查实,本站将立刻删除。