代码改变世界

Silverlight应用开发2webcam自拍保存和"录像"

2010-11-30 22:40  撞破南墙  阅读(3562)  评论(8编辑  收藏  举报

1 题外话:缘起

2 开工ing

  2.1Silverlight中的视频

  2.2伪视频录像 

3 展示 

4 题外话二

 

 

 我拍基地

  

 我拍桌面:死循环。。。

 

 

 题外话:缘起

   前几天看到几个外国年轻人,搞了个利用kinect做的PC版本上的自然用户界面。。。很cool,当时没看明白,以为是通过摄像头+他的算法,就可以做出来。。。害我把它的chorme插件下载下来。翻出箱底的摄像头开始乱摆弄。。。结果发现需要 kinect。。。当时那个郁闷啊。。。

   然后就想拿摄像头能做其他什么游戏的没。。。发现很少。。然后又突然来了兴趣给基地做个视频监控系统!嘿嘿。。。。好吧。。。花了一个晚上的时间把这个照相+伪视频的小程序给整出来了。。。

 

 2 开工ing

  2.1Silverlight中的webcam

    1获取视频列表

 

 CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices();

 

    2显示视频

       //获取可用webcam

            comboBox1.ItemsSource = CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices();


            
//硬件
            VideoCaptureDevice webcam = CaptureDeviceConfiguration
                .GetDefaultVideoCaptureDevice();
          
            
//视频流
            _captureSource.VideoCaptureDevice = webcam;


    
//播放视频的画刷
            VideoBrush webcamBrush = new VideoBrush();
            webcamBrush.SetSource(_captureSource);
            
//webcamDisplay is a Rectangle
            webcamDisplay.Fill = webcamBrush;

            
// Request access to the device and verify the VideoCaptureDevice is not null.
            if (CaptureDeviceConfiguration.RequestDeviceAccess() && _captureSource.VideoCaptureDevice != null) {
                
try {
                    _captureSource.Start();
                } 
catch (InvalidOperationException ex) {
                    
// Notify user that the webcam could not be started.
                    MessageBox.Show("There was a problem starting the webcam " +
                        
"If using a Mac, verify default devices are set correctly.  " +
                        
"Right click on a Silverlight app to access the Configuration setings.");
                }
            }

            
if (CaptureDeviceConfiguration.RequestDeviceAccess() && _captureSource.VideoCaptureDevice != null) {
                
try {
                    _captureSource.Start();
                } 
catch (InvalidOperationException ex) {

                }
            }

 

    3 照相

      EventHandler<CaptureImageCompletedEventArgs> eventHandler = null;

            _captureSource.CaptureImageCompleted += eventHandler = (s1, e1) => {
            Image image = new Image();
            image.Source = e.Result;
            Imageslist.Children.Add(image);
                _captureSource.CaptureImageCompleted -= eventHandler;
            };
            _captureSource.CaptureImageAsync();

 

    4把照相保存到本地

      需要一个FJ.DLL ,今天在群里也有人提到使用imagetool.codeplex.com,

你可以自行选择或者自己写一个。。当然那比较麻烦。在我的源码里面已经提供了FJ的源码,你也可以去上网 www.codeplex.com去自己下载它的源码。

      具体代码见我的源码。 

 

  2.2伪视频录像 

       说说思路吧。。挺简陋的。。每隔0.1秒照一次。按道理说#mindhacksxx#电影里只需要1秒钟播放24张就可以让人产生连续运动的效果了。

播放的时候再把照的图片按照那个顺序”播放 “一遍。。。

3 展示 

    前提:摄像头一个。。

#start :开始 显示视频 

#end : 暂停

#save 保存第一张照片出来。

#begin 和 end 开始录制和结束录制视频(小心你的内存)

#play 开始播放录制的视频。。 

源码下载 https://files.cnblogs.com/facingwaller/VideoCaptureSourceCode.rar

 

Get Microsoft Silverlight

4 题外话二

   这两天在Silverlight板块出现了 3D黑白棋 StarReversi 和3D中国跳棋 (Chinese Checker) 进去看了一下发现他们是中科大的 学生。说实话我挺羡慕那些在特别名校的学生的,这个念头在大二之前都没什么萌芽,因为那时候觉得大家都差不多一样学,后来时而强烈时而冷淡。。。我知道我天真了。。。我绝对知道有很多在名校的学计算机的没有我code那么厉害,说起IT的事也没我能扯,但是从老赵书托里推荐的教材,还有很多例子里,包括我自己这个学期在修的一门项目实践,那个老师也是特别牛的,好吧,是我亲眼见过的最牛的,也是让我学到特别多技术和技术之外的东西的。这样我更加感觉,我终于知道,他们能遇到更多的牛人,得到更多言传身教和训练(就像《THE ART OF UNIX》里说的)。这不是从网络上想百度就百度得到的,很多是真的需要那么个环境。。把某些我们需要很久都参不透的东西,去点破。。谁好谁坏也许也不尽然。

    如果有幸你是一位名校的计算机专业的家伙,特别欢迎你来和我交流或评论留言。 

    如果你跟我一样也是一个不怎么好的学校的专业,也欢迎你来多多交流经验,互相学习。我们更加需要依靠自己的毅力和对自己的热情去抵制堕落~好久前写过的心得平凡不愿平庸,两年的编程心路

    近期我想再整理一下自己的想法,把从那之后到现在的心路再跟大家分享,给大家参考,虽然这比较"月经贴"。。。

    补充一下,我不觉得自己写编码解码图片和视频是不可能的事或者是牛人的专利。 有时间有精力能力也还行的话我会去玩一下然后和大家分享。加油。