原文:快速构建Windows 8风格应用29-捕获图片与视频

引言

本篇博文主要介绍Windows 8中相机的概念、捕获图片与视频的基本原理、如何实现捕获图片与视频、相机最佳实践。

一、相机

关于相机

1.相机对话框提供了触屏优化的全屏体验,你可从嵌入的或附加的相机中捕获照片和视频。

2.全屏对话框处理显示相机 UI 的工作。

3.通过此对话框,你可以使用对 Windows.Media.Capture.CameraCaptureUI.captureFileAsyncAPI 的一种方法调用捕获照片或视频。

4.作为捕获体验的一部分,用户可对其捕获的照片进行修剪,对捕获的视频进行剪辑,然后再将它们返回至调用应用程序。

5.用户在捕获照片或视频前,还可调整一些相机设置,例如亮度、对比度和曝光等。相机对话框用于实时照片和视频捕获。

相机设置

1.可通过相机选项调整相机设置

2.包括照片分辨率;是否视频防抖动;亮度;对比度等选项

编辑照片

1.“裁剪”按钮进行裁剪照片

2.“确定”按钮确认捕获的照片

3.“重拍”按钮重新拍摄照片

编辑视频

1.“剪辑”按钮进行剪辑视频

2.“确定”按钮确认捕获的视频

3.“重拍”按钮重新拍摄视频

二、捕获图片与视频的基本原理

首先,我们需要在清单文件中注册摄像头/麦克风权限。

其次,在相应的.cs文件中,添加命名空间。

最后,声明CameraCaptureUI对象、设置对象属性、调用CaptureFileAsync方法。

然后我们就可以通过应用程序调用摄像头来捕获照片/视频了。

三、如何实现捕获图片与视频

启用摄像头权限

1.捕获照片时,应用必须允许使用摄像头

2.可通过设置应用程序清单文件(Package.appxmanifest)启用摄像头权限

3.Capabilities选项卡中勾选Webcam项

启用麦克风权限

1.捕获视频时,应用一般允许使用麦克风

2.可通过设置应用程序清单文件(Package.appxmanifest)启用麦克风权限

3.Capabilities选项卡中勾选Microphone项

捕获照片相关属性

捕获视频相关属性

如何捕获照片

   1:  using Windows.Media.Capture;
   2:  private  async  void  OnCapturePhoto(object  sender, TappedRoutedEventArgs e)
   3:  {
   4:      var camera = new CameraCaptureUI();
   5:   
   6:      var file = await camera.CaptureFileAsync(CameraCaptureUIMode.Photo);
   7:      if (file != null)
   8:      {
   9:          photo = file;
  10:   
  11:          DataTransferManager.ShowShareUI();
  12:      }
  13:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

通过CameraCaptureUIMode可以设置Phone;Video;PhoneOrVideo。

如何捕获视频

   1:  using Windows.Media.Capture;
   2:  private async void OnCaptureVideo(object sender, TappedRoutedEventArgs e)
   3:  {
   4:        var camera = new CameraCaptureUI();
   5:   
   6:        camera.VideoSettings.Format = CameraCaptureUIVideoFormat.Wmv;
   7:   
   8:        var file = await camera.CaptureFileAsync(CameraCaptureUIMode.Video);
   9:        if (file != null)
  10:        {
  11:             video = file;
  12:             DataTransferManager.ShowShareUI();
  13:        }
  14:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

四、相机最佳实践

相机UI的合理使用

例如:对于提供个人资料图片的应用,可通过启动相机对话框捕获照片,进行更新个人资料。

相机UI的不合理使用

1.当用户使用相机扫描条形码时,条形码阅读器应用可以为用户提供实时反馈,以让用户知道该条形码是否可读。这种情况下,使用相机对话框可能不是正确的选择,因为其对捕获的视频流不提供任何直接控制。你应该转而使用 MediaCapture API。

2.如果你需要添加超出相机对话框所提供功能的 UI 自定义,你应该转而使用 MediaCapture

3.如果你的应用程序为视频或照片编辑应用程序,或具备某些照片或视频编辑功能,则应在修剪和裁剪功能关闭的情况下,使用相机对话框。然后,你的应用程序中的修剪和裁剪功能将不会与相机对话框中提供的功能重复。

 

相关参考资料:

1.媒体捕获示例

2.摄像头捕捉 UI 示例

3.摄像头选项 UI 示例

4.捕获或呈现音频、视频和图像(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用) (Windows)

快速构建Windows 8风格应用29-捕获图片与视频的更多相关文章

  1. 快速构建Windows 8风格应用32-构建辅助磁贴

    原文:快速构建Windows 8风格应用32-构建辅助磁贴 引言 Windows Phone中,我们开发者可能会开发的一个功能点是将数据列表中某一项"Pin To Start(固定到开始屏幕 ...

  2. 快速构建Windows 8风格应用17-布局控件

    原文:快速构建Windows 8风格应用17-布局控件 本篇博文主要介绍三种常用的布局控件:Canvas.Grid.StackPanel. Panel类是开发Windows 8 Store应用中一个重 ...

  3. 快速构建Windows 8风格应用15-ShareContract构建

    原文:快速构建Windows 8风格应用15-ShareContract构建 本篇博文主要介绍共享数据包.如何构建共享源.如何构建共享目标.DataTransferManager类. 共享数据包 Da ...

  4. 快速构建Windows 8风格应用14-ShareContract概述及原理

    原文:快速构建Windows 8风格应用14-ShareContract概述及原理 本篇博文主要介绍Share Contract概述.Share Contract实现原理.实现Share Contra ...

  5. 快速构建Windows 8风格应用13-SearchContract构建

    原文:快速构建Windows 8风格应用13-SearchContract构建 本篇博文主要介绍如何在应用中构建SearchContract,相应的原理已经在博文<快速构建Windows 8风格 ...

  6. 快速构建Windows 8风格应用9-竖直视图

    原文:快速构建Windows 8风格应用9-竖直视图 本篇博文主要介绍竖直视图概览.关于竖直视图设计.如何构建竖直视图 竖直视图概览 Windows 8为了支持旋转的设备提供了竖屏视图,我们开发的应用 ...

  7. 快速构建Windows 8风格应用10-设备方向

    原文:快速构建Windows 8风格应用10-设备方向 本篇博文主要介绍常用支持Windows 8操作系统设备的方向.如何获取当前设备方向.DisplayProperties类. 常用支持Window ...

  8. 快速构建Windows 8风格应用11-语义缩放

    原文:快速构建Windows 8风格应用11-语义缩放 本篇博文主要介绍为什么需要语义缩放.什么是语义缩放.如何构建语义缩放. 为什么需要语义缩放 如果用过Windows 8系统的开发者都知道在Win ...

  9. 快速构建Windows 8风格应用12-SearchContract概述及原理

    原文:快速构建Windows 8风格应用12-SearchContract概述及原理 本篇博文主要介绍Search Contract概述.Search Contract面板结构剖析.Search Co ...

随机推荐

  1. jqm的多列布局demo,html5的多列布局demo,多列布局的具体解说,html5开发实例具体解释

    因为移动设备屏幕宽度较小,所以一般不建议使用多列布局.但有时你可能须要并排放置一些元素(如button之类的). jQuery Mobile通过约定的类名ui-grid来提供了一种基于css的多列布局 ...

  2. DOM笔记2

    <!-- 节点类型检查 if(someNode.nodeType==ElementNode){ alert("Node is an element"); } 或者 if(so ...

  3. python 3.4.0 简单的print &#39;hello world&#39;,出错--SyntaxError: invalid syntax

    问题描写叙述: win7下安装的python 3.4.0版本号, 在命令行里写入简单的输出语句: print 'hello world' 然后enter,结果返回结果为: SyntaxError: i ...

  4. NSIS:检查某注册表键是否存在

    原文NSIS:检查某注册表键是否存在 ;定义注册表主键!define HKEY_CLASSES_ROOT           0x80000000!define HKEY_CURRENT_USER   ...

  5. 记录我第一次在Android开发图像处理算法的经历

    大概是四月底的时候.有人加我QQ问我是否做能做一些基于图像皮肤检測的算法, 主要是实现对皮肤六项指标: 1.      水分 2.      有份 3.      痤疮与痘痘 4.      色斑与肤 ...

  6. linux下一个apache+tomcat负载均衡和集群

    先说一下我的环境 一个ubuntu虚拟机, 一个apache2.2示例 两tomcat1.7示例 1.安装apacheserver sudo apt-get install apache2 假设要重新 ...

  7. Cytoscape画图初探

    Cytoscape是一个做网络图的js插件.用起来非常方便,并且非常强大.这是它的站点:点击打开链接 使用它须要导入两个文件,一个是js文件,一个是css文件.官网上下载. 这里实现了一个功能.即从后 ...

  8. android app启动过程(转)

    Native进程的运行过程 一般程序的启动步骤,可以用下图描述.程序由内核加载分析,使用linker链接需要的共享库,然后从c运行库的入口开始执行. 通常,native进程是由shell或者init启 ...

  9. 获得mysql内容,生成xml文件,另外,为了webservice发送

    <xyt> <news id> <url></url> <title></title> </news> </x ...

  10. zoj3791(An Easy Game) DP

    意甲冠军:给定两个01弦s1,s2.每一个变化s1在m字 - 位.要求k制作步骤之后s1变s2有多少种方法. 解法:DP,关键是状态的设计.考虑还是唯一性和可传递性.dp[i][j]表示第i步后有j个 ...