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

本文介绍如何使用Silverlight截取摄像头视频画面,并将其转换为Jpeg,进一步转化为Base64String,然后通过WCF服务存入Sqlserver数据库。示例代码包括截取、转换和上传流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用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 colors
            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 color = p[i++];
                    pixelsForJpeg[0][x, y] = (byte)(color >> 16); // R
                    pixelsForJpeg[1][x, y] = (byte)(color >> 8);  // G
                    pixelsForJpeg[2][x, y] = (byte)(color);       // B
                }
            }

            //Encode Image as JPEG
            var jpegImage = new FluxJpeg.Core.Image(new ColorModel { colorspace = ColorSpace.RGB }, pixelsForJpeg);
            var encoder = new JpegEncoder(jpegImage, 95, dstStream);
            encoder.Encode();
        }
//使用SaveFileDialog保存到本地
<pre name="code" class="csharp"> 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");

        }

Silverlight 视频截取并专成 Base64String 


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

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


文本完整范例代码下载


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值