日期:2014-05-17 浏览次数:20761 次
先解释一下啥是“多媒体捕捉”,这只是一种直译,说得通俗一点,就是希望应用程序可以调用摄像头拍摄“艳照”或者录制视频。比如美图秀秀可以处理你已经保存的图片,但也可能让你现场来“秀”一下。如果我们需要在应用程序中让用户实时拍摄照片,这个功能就显得必须了。
比如,你想弄个偷拍程序,当然,这是做梦,因为出于安全和尊重用户的隐私考虑,Win8“板砖”应用在使用摄像头之前会先问一下用户:“我能用用你的摄像头吗?”如果用户说:“OK,木有问题,那就调用。”而如果用户说:“靠,滚!”那你这个功能只能一边站了。
那为什么叫“低级篇”呢?因为我们本节只用到系统默认带的拍摄UI,已经封装好了,用起来很轻松,如果你的应用只是简单的拍摄,就优先考虑这个。因为这世界上只有傻X才会把简单的事情复杂化。
那么这具组件在哪里?按名字找,嘿嘿,找着了,在命名空间Windows.Media.Capture下,她的大名叫CameraCaptureUI,后面带有UI两个字母,你都猜到她是谁了。
在“对象浏览器”认真研究一下这位MM,你发现,她太单纯了,两个分别用来设置照片和视频参数的属性,即PhotoSettings和VideoSettings。而好的思想更简单,要拍摄吗?请调用CaptureFileAsync方法吧,看方法名,是异步的,用的时候记得不要忘了await关键字啊。
纯真的女孩就是可爱,如果你只需要单纯的拍摄功能,不要犹豫了,果断选择她吧。
有句话叫“知行合一”,还有一句话叫“天人合一”,所以,光嘴巴上吹也不行,亲,别光坐着,动手干活!
1、启动VS ,新项一个空白页面应用。
2、主页的布局我直接贴代码,因为我不相信你看不懂。
【XAML】
<Page x:Class="Example27.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Example27" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Canvas Grid.Column="0" Width="180"> <Button Canvas.Left="13" Canvas.Top="20" Padding="10,8" Content="拍照" Click="onClick" FontSize="38"/> <StackPanel Orientation="Vertical" Canvas.Left="15" Canvas.Top="140"> <RadioButton Content="照片" GroupName="setting" IsChecked="True" Checked="onRadChecked"/> <RadioButton Content="视频" GroupName="setting" Checked="onRadChecked"/> </StackPanel> </Canvas> <Image Grid.Column="1" Margin="15" x:Name="imgPhoto" Stretch="Uniform"/> <MediaElement Grid.Column="1" x:Name="me" Margin="18" AutoPlay="False" Visibility="Collapsed" CurrentStateChanged="me_CurrentStateChanged_1"/> </Grid> </Page>
后台代码嘛,我就先帖后述吧。
【C#】
using System; using System.Collections.Generic; using System.IO; using System.Linq; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; using Windows.Media.Capture; using Windows.Storage; using Windows.Storage.Streams; using Windows.UI.Xaml.Media.Imaging; namespace Example27 { /// <summary> /// 可用于自身或导航至 Frame 内部的空白页。 /// </summary> public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } /// <summary> /// 捕捉模式 /// </summary> CameraCaptureUIMode CaptureMode = CameraCaptureUIMode.Photo; private void onRadChecked(object sender, RoutedEventArgs e) { RadioButton rdb = sender as RadioButton; if (rdb != null) { string content = rdb.Content as string; if (content == "照片") { this.CaptureMode = Cam