• win8 摄像


     StorageFile file = null;  
            public MainPage()  
            {  
                this.InitializeComponent();  
            }  
      
            /// <summary>  
            /// 在此页将要在 Frame 中显示时进行调用。  
            /// </summary>  
            /// <param name="e">描述如何访问此页的事件数据。Parameter  
            /// 属性通常用于配置页。</param>  
            protected override void OnNavigatedTo(NavigationEventArgs e)  
            {  
            }  
            //拍照  
            private async void Button_Click_1(object sender, RoutedEventArgs e)  
            {  
                /*CameraCaptureUI类负责启动摄像头,并捕获照摄像头拍摄的照片 
                 要想启动摄像头,需打开Package.appxmanifest文件,切换到“功能”界面, 
                 勾选网络摄像机和麦克风*/  
                CameraCaptureUI dialog = new CameraCaptureUI();  
                Size aspectRatio = new Size(16, 9);  
                /*设定摄像头拍摄照片的高宽比,拍照完成之后就能看到效果,可以通过修改高宽比 
                 来查看不同的效果*/  
                dialog.PhotoSettings.CroppedAspectRatio = aspectRatio;  
                /*CaptureFileAsync方法负责启动摄像有并拍摄照片或拍摄影片,其返回值为拍摄的照片或拍摄的影片. 
                 CameraCaptureUIMode是个枚举,设置拍摄的是照片还是影片*/  
                file = await dialog.CaptureFileAsync(CameraCaptureUIMode.Photo);  
                if (file != null)  
                {  
                    /*BitmapImage类是ImageSource类的子类,用来将图片填充到Image控件中*/  
                    BitmapImage bitmapImage = new BitmapImage();  
                    /*使用OpenAsync打开拍摄的照片,返回流filestream*/  
                    using (IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.Read))  
                    {  
                        //设置bitmapImage的图片源为拍摄的照片  
                        bitmapImage.SetSource(fileStream);  
                    }  
                    //将照片显示到图片控件中  
                    CapturedPhoto.Source = bitmapImage;  
                }  
            }  
            //保存图片,为了显得正式些,使用了AppBar  
            private async void btnSave_Click_1(object sender, RoutedEventArgs e)  
            {  
                //实例化文件选取器  
                FileSavePicker picker = new FileSavePicker();  
                //设置图片保存的类型  
                picker.FileTypeChoices.Add("image file", new List<string>() { ".jpg",".png" });  
                /*返回文件选取器返回的新建的文件:调用PickSaveFileAsync方法后会在制定的位置 
                创建制定名称制定格式的文件*/  
                StorageFile storageFile = await picker.PickSaveFileAsync();  
                //打开通过摄像头拍摄的照片,并返回流,以流的形式读取文件  
                var StreamRandom = await file.OpenAsync(FileAccessMode.Read);  
                //将拍摄的照片以流的方式读取到缓冲区  
                IBuffer buffer = RandomAccessStreamToBuffer(StreamRandom);  
                //将缓冲区的内容(拍摄的照片)写入到新建的文件中  
                await FileIO.WriteBufferAsync(storageFile, buffer);  
      
      
            }  
            //将图片写入到缓冲区  
            private IBuffer RandomAccessStreamToBuffer(IRandomAccessStream randomstream)  
            {  
                Stream stream = WindowsRuntimeStreamExtensions.AsStreamForRead(randomstream.GetInputStreamAt(0));  
                MemoryStream memoryStream = new MemoryStream();  
                if (stream != null)  
                {  
                    byte[] bytes = ConvertStreamTobyte(stream);  
                    if (bytes != null)  
                    {  
                        var binaryWriter = new BinaryWriter(memoryStream);  
                        binaryWriter.Write(bytes);  
                    }  
                }  
                IBuffer buffer = WindowsRuntimeBufferExtensions.GetWindowsRuntimeBuffer(memoryStream, 0, (int)memoryStream.Length);  
                return buffer;  
            }  
            //将流转换成二进制  
            public static byte[] ConvertStreamTobyte(Stream input)  
            {  
                byte[] buffer = new byte[16 * 1024];  
      
                using (MemoryStream ms = new MemoryStream())  
                {  
                    int read;  
                    while ((read = input.Read(buffer, 0, buffer.Length)) > 0)  
                    {  
                        ms.Write(buffer, 0, read);  
                    }  
                    return ms.ToArray();  
                }  
            }

    简洁版

      /*CameraCaptureUI类负责启动摄像头,并捕获照摄像头拍摄的照片
       要想启动摄像头,需打开Package.appxmanifest文件,切换到“功能”界面,
       勾选网络摄像机和麦克风*/
                CameraCaptureUI dialog = new CameraCaptureUI();
                //Size aspectRatio = new Size(16, 9);
                /*设定摄像头拍摄照片的高宽比,拍照完成之后就能看到效果,可以通过修改高宽比
                 来查看不同的效果*/
                //dialog.PhotoSettings.CroppedAspectRatio = aspectRatio;
                /*CaptureFileAsync方法负责启动摄像有并拍摄照片或拍摄影片,其返回值为拍摄的照片或拍摄的影片.
                 CameraCaptureUIMode是个枚举,设置拍摄的是照片还是影片*/
                StorageFile file = await dialog.CaptureFileAsync(CameraCaptureUIMode.PhotoOrVideo);
                if (file != null)
                {
                    FolderPicker openPic = new FolderPicker();
                    openPic.FileTypeFilter.Add("*");
                    StorageFolder store = await openPic.PickSingleFolderAsync();
                    await file.MoveAsync(store);
                }
  • 相关阅读:
    Linux JDK安装
    Redis集群搭建
    Struts2 中添加 Servlet
    js小技巧:数组去重
    修改Request 中的数据
    JAVA 图形界面开发基础详解
    JAVA 类和对象基础知识详解
    Java 类的继承详解
    C++ 大学课堂知识点总结
    数据库简单练习 建表+select
  • 原文地址:https://www.cnblogs.com/Iyce/p/3780445.html
Copyright © 2020-2023  润新知