摄像头使用:
摄像头捕获动态图形的基本设计过程:
①获取摄像设备
②设置捕获源对象
③设置视频刷
④填充矩形显示
添加引用
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,0,(int)stream.Length);
//写入文件流
jpegstream.Write(buffer,0,buffer.Length);
}
//关闭摄像头
private void Close(){
capturesource.Stop();
this.rectangle.Fill=null;
}