Silverlight 截取摄像头视频截图并通过Base64String上传到数据库的例子

Silverlight 截取摄像头视频截图并通过Base64String上传到数据库的例子,第1张

概述用Silverlight截取摄像头视频截图并不是什么难事。本文的范例代码详细介绍了视频截取和两种保存截图的方式: 1.使用开源的FJCore.dll 把视频流转换成Jpeg 格式,保存到本地,代码如下: public static void EncodeJpeg(WriteableBitmap bmp, Stream dstStream) { // Ini

用Silverlight截取摄像头视频截图并不是什么难事。本文的范例代码详细介绍了视频截取和两种保存截图的方式:

1.使用开源的FJCore.dll 把视频流转换成Jpeg 格式,保存到本地,代码如下:


 public static voID EncodeJpeg(WriteableBitmap bmp,Stream dstStream)        {            // Init buffer in FluxJpeg format            int w = bmp.PixelWIDth;            int h = bmp.PixelHeight;            int[] p = bmp.Pixels;            byte[][,] pixelsForJpeg = new byte[3][,]; // RGB @R_404_6004@s            pixelsForJpeg[0] = new byte[w,h];            pixelsForJpeg[1] = new byte[w,h];            pixelsForJpeg[2] = new byte[w,h];            // copy WriteableBitmap data into buffer for FluxJpeg            int i = 0;            for (int y = 0; y < h; y++)            {                for (int x = 0; x < w; x++)                {                    int @R_404_6004@ = p[i++];                    pixelsForJpeg[0][x,y] = (byte)(@R_404_6004@ >> 16); // R                    pixelsForJpeg[1][x,y] = (byte)(@R_404_6004@ >> 8);  // G                    pixelsForJpeg[2][x,y] = (byte)(@R_404_6004@);       // B                }            }            //Encode Image as JPEG            var jpegImage = new FluxJpeg.Core.Image(new @R_404_6004@Model { @R_404_6004@space = @[email protected] },pixelsForJpeg);            var encoder = new JpegEncoder(jpegImage,95,dstStream);            encoder.Encode();        }
//使用SavefileDialog保存到本地<pre name="code" > private voID btSave_Click(object sender,RoutedEventArgs e)        {            if (savefileDlg.ShowDialog().Value)            {                try                {                    using (Stream dstStream = savefileDlg.Openfile())                    {                        WriteableBitmap bmp = new WriteableBitmap(VIEwportHost,null);                        EncodeJpeg(bmp,dstStream);                    }                }                catch (Exception ex)                {                    MessageBox.Show(ex.ToString());                }            }        }

 

但如何上传到服务器,并保存在数据库内,作者尝试了多种方案,由于Silverlight 在代码安全方面的诸多限制,最终选择使用把图片转换成Base64String,

使用WCF,保存在sqlserver数据库中。

使用Base64String的方法,在数据库表里建一个varchar的字段就可以保存图片数据了。

2. 通过把图片流转换成Base64String保存到服务器数据库:

实现方法:

建一个Base64String的转换类,代码如下:

 public class Base64Convert    {        public static string Encode(Stream stream)        {            try            {                BinaryReader binary = new BinaryReader(stream);                Byte[] imgB = binary.ReadBytes((int)stream.Length);                return Convert.ToBase64String(imgB);            }            catch            {                return "";            }        }        public static BitmAPImage Decode(string s)        {            byte[] imageData = Convert.FromBase64String(s);            MemoryStream ms = new MemoryStream(imageData);            BitmAPImage tempImage = new BitmAPImage();            tempImage.SetSource(ms);            ms.dispose();            return tempImage;        }    }


这样我们可以很方便的调用这个类,把截取的图片转成Base64String:

 private voID OKbutton_Click(object sender,RoutedEventArgs e)        {            if (_captureImage != null)//如果已经有抓拍的图像,那么可以上传            {                this.txtBlog.Text = Base64Convert.Encode(SaveSnapshottoServer());            }            //这时候,this.txtBlog.Text 内的Base64String 就可以保存在数据库的varchar字段内了!            //如果要从数据库取回图片数据,那么就调用            // Image.source = Base64Convert.Decode("从数据库取回的string");        }

 


大家从上面的截图就可以看出,所截取的视频图像,已经转换成String格式,并可以保存在文本框里了。

这时候,this.txtBlog.Text 内的Base64String 就可以保存在数据库的varchar字段内了。如果要从数据库取回图片数据,并显示在一个Image控件内,那么调用以下的方法即可:Image.source = Base64Convert.Decode("从数据库取回的string");


文本完整范例代码下载

总结

以上是内存溢出为你收集整理的Silverlight 截取摄像头视频截图并通过Base64String上传到数据库的例子全部内容,希望文章能够帮你解决Silverlight 截取摄像头视频截图并通过Base64String上传到数据库的例子所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1070522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存