概述
摄像头使用: 摄像头捕获动态图形的基本设计过程: ①获取摄像设备 ②设置捕获源对象 ③设置视频刷 ④填充矩形显示 添加引用 using System.Windows.Media.Imaging; using System.IO; public VideoCaptureDevice camera; //定义摄像设备 public CaptureSource c 摄像头使用: 摄像头捕获动态图形的基本设计过程: ①获取摄像设备 ②设置捕获源对象 ③设置视频刷 ④填充矩形显示 添加引用 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; } 总结
以上是内存溢出为你收集整理的Silverlight之摄像头使用全部内容,希望文章能够帮你解决Silverlight之摄像头使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)