刚刚做过这类开发,所以就先献丑了,当然所贴上的源代码都是经过验证过的,已经执行成功了,希望能够给大家一些借鉴:

以下是metro UI代码:

  1. <Page
  2. x:Class="Camera.MainPage"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:local="using:Camera"
  6. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  7. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  8. mc:Ignorable="d">
  9.  
  10. <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
  11. <Button x:Name="btnCamera" Content="打开摄像头" HorizontalAlignment="Left" Margin="48,259,0,0" VerticalAlignment="Top" Click="btnCamera_Click" Height="45"/>
  12. <Image x:Name="img1" HorizontalAlignment="Left" Height="609" Margin="240,78,0,0" VerticalAlignment="Top" Width="718" Stretch="Fill"/>
  13. <Button x:Name="btnSave" Content="保存图片" HorizontalAlignment="Left" Margin="48,369,0,0" VerticalAlignment="Top" Height="44" Click="btnSave_Click"/>
  14. </Grid>
  15. </Page>

显示的界面事实上非常easy,可是这不重要,功能才是基本的,以下贴上基本的开发代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Runtime.InteropServices.WindowsRuntime;
  6. using Windows.Foundation;
  7. using Windows.Foundation.Collections;
  8. using Windows.UI.Xaml;
  9. using Windows.UI.Xaml.Controls;
  10. using Windows.UI.Xaml.Controls.Primitives;
  11. using Windows.UI.Xaml.Data;
  12. using Windows.UI.Xaml.Input;
  13. using Windows.UI.Xaml.Media;
  14. using Windows.UI.Xaml.Navigation;
  15. using Windows.Media.Capture;
  16. using Windows.Storage;
  17. using Windows.Storage.Pickers;
  18. using Windows.UI.Xaml.Media.Imaging;
  19. using Windows.Storage.Streams;
  20.  
  21. // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
  22.  
  23. /*
  24. *
  25. * 作者:李天鹏
  26. * 功能:调用PC上自带的camera实现拍照的功能,并保存在对应的目录下
  27. * */
  28. namespace Camera
  29. {
  30. /// <summary>
  31. /// An empty page that can be used on its own or navigated to within a Frame.
  32. /// </summary>
  33. public sealed partial class MainPage : Page
  34. {
  35. private StorageFile file = null;
  36. public MainPage()
  37. {
  38. this.InitializeComponent();
  39.  
  40. }
  41.  
  42. private async void btnCamera_Click(object sender, RoutedEventArgs e)
  43. {
  44. CameraCaptureUI dialog = new CameraCaptureUI();
  45. dialog.PhotoSettings.CroppedAspectRatio = new Size(16, 9);
  46. file = await dialog.CaptureFileAsync(CameraCaptureUIMode.Photo);
  47. if (file != null)
  48. {
  49. BitmapImage bitmapImage = new BitmapImage();
  50. using (IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.Read))
  51. {
  52. bitmapImage.SetSource(fileStream);
  53. }
  54. img1.Source = bitmapImage;
  55. }
  56. }
  57.  
  58. private async void btnSave_Click(object sender, RoutedEventArgs e)
  59. {
  60. if (img1.Source == null)
  61. return;
  62. else
  63. {
  64. FileSavePicker picker = new FileSavePicker();
  65. picker.CommitButtonText = "保存";
  66. picker.SuggestedFileName = "hello";
  67. picker.FileTypeChoices.Add("图片",new string[]{".jpg",".jpeg",".bmp",".png"});
  68.  
  69. picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
  70. StorageFile filePath = await picker.PickSaveFileAsync();
  71. if (filePath != null)
  72. {
  73. //打开通过摄像头拍摄的照片,并返回流,以流的形式读取文件
  74. var streamRandom = await file.OpenAsync(FileAccessMode.Read);
  75. //将拍摄的照片以流的形式读取到缓冲区
  76. IBuffer buffer = RandomAccessStreamToBuffer(streamRandom);
  77. //将缓冲区内容写入对应的目录中
  78. await FileIO.WriteBufferAsync(filePath, buffer);
  79. }
  80. }
  81. }
  82.  
  83. //将图片写入到缓冲区
  84. private IBuffer RandomAccessStreamToBuffer(IRandomAccessStream randomstream)
  85. {
  86. Stream stream = WindowsRuntimeStreamExtensions.AsStreamForRead(randomstream.GetInputStreamAt(0));
  87. MemoryStream memoryStream = new MemoryStream();
  88. if (stream != null)
  89. {
  90. byte[] bytes = ConvertStreamTobyte(stream); //将流转化为字节型数组
  91. if (bytes != null)
  92. {
  93. var binaryWriter = new BinaryWriter(memoryStream);
  94. binaryWriter.Write(bytes);
  95. }
  96. }
  97. IBuffer buffer = WindowsRuntimeBufferExtensions.GetWindowsRuntimeBuffer(memoryStream, 0, (int)memoryStream.Length);
  98. return buffer;
  99. }
  100.  
  101. //将流转换成二进制
  102. public static byte[] ConvertStreamTobyte(Stream input)
  103. {
  104. byte[] buffer = new byte[16 * 1024];
  105. using (MemoryStream ms = new MemoryStream())
  106. {
  107. int read;
  108. while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
  109. {
  110. ms.Write(buffer, 0, read);
  111. }
  112. return ms.ToArray();
  113. }
  114. }
  115. }
  116. }

可是这还不够,假设须要调用camera,还须要一些权限,应该在Package.appxmanifest里面改动权限,

改动例如以下:仅仅要勾上webcam即可了。

源代码下载:

http://download.csdn.net/detail/litianpeng1991/7548065

win8 metro 调用摄像头拍摄照片并将照片保存在对应的位置的更多相关文章

  1. Win8 Metro(C#) 数字图像处理--1 图像打开,保存

    原文:Win8 Metro(C#) 数字图像处理--1 图像打开,保存 作为本专栏的第一篇,必不可少的需要介绍一下图像的打开与保存,一便大家后面DEMO的制作.   Win8Metro编程中,图像相关 ...

  2. win8 metro 自己写摄像头拍照项目

    这个项目不是用的系统自带的CameraCaptureUI.是自己写的摄像头的调用,界面做的不好所以,不放了.可是能够实现拍照功能: 以下是using 程序命名空间: using Windows.Med ...

  3. Unity 3D 调用摄像头捕获照片 录像

    1,要想调用摄像头首先要打开摄像头驱动,如果用户允许则可以使用. 2,定义WebCamTexture的变量用于捕获单张照片. 3,连续捕获须启用线程. 实现代码: using UnityEngine; ...

  4. 微信公众号开发调用摄像头、拍摄或选择图片、OCR识别

     一 .准备工作       <1> 域名认证准备工作 在需要调用摄像头的接口页面引入微信的js,具体地址为:(支持https):http://res.wx.qq.com/open/js/ ...

  5. win8 metro 自己写摄像头录像项目

    这是要求不适用CameraCaptureUI等使用系统自带的 camera  UI界面.要求我们自己写调用摄像头摄像的方法,如今我把我的程序贴下: UI界面的程序: <Page x:Class= ...

  6. web HTML5 调用摄像头的代码

    最近公司要求做一个在线拍照的功能,具体代码如下: <html> <head> <title>html5调用摄像头拍照</title> <style ...

  7. Android开发中如何调用摄像头的功能

    我们要调用摄像头的拍照功能,显然 第一步必须加入调用摄像头硬件的权限,拍完照后我们要将图片保存在SD卡中,必须加入SD卡读写权限,所以第一步,我们应该在Android清单文件中加入以下代码     & ...

  8. 用MVVM模式开发中遇到的零散问题总结(4)——自制摄像头拍摄大头贴控件

    原文:用MVVM模式开发中遇到的零散问题总结(4)--自制摄像头拍摄大头贴控件 一直有个疑问,为什么silverlight对摄像头支持这么好,WPF却一个库都没有....于是我各种苦恼啊,各种Code ...

  9. android ——调用摄像头拍照和相册

    先在布局文件中加入两个按钮和一个图片控件 <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

随机推荐

  1. wordpress博客近期变慢之解决(fonts.google.com)

    近期发现站点訪问速度变慢.博客文章打开速度特慢,也没改动过东西. 并且近期发现google的服务非常多訪问都打不开或是变慢. 于是知道可能是那"伟大东西"在作坏事了. 症状: 网页 ...

  2. WPF-21:WPF实现仿安卓的图案密码键盘(初级)

    希望大家有这方面好的代码给提供下,谢谢了! 想用C#做一个和手机上一样的图形密码键盘,貌似这方面资料比较少,虽然winphone手机上也有但是网上也没有这方面的代码.只好用常规的思维去实现一下,当然是 ...

  3. Java中动态代理技术生成的类与原始类的区别 (转)

    用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...

  4. Zoj 3545 Rescue the Rabbit(ac自己主动机+dp)

    标题效果: 鉴于DNA有一个正确的顺序值.请构造一个长度I的DNA在这个序列使DNA正确的顺序值极大.它被认为是负的输出噼啪. .. IDEAS: 施工顺序是,ac己主动机上走,求最大要用到dp dp ...

  5. rsync 只是测试,请看下一篇

    实现从客户服务器去同步资源服务器 1.解压 # tar -xzpvf rsync-2.5.6.tar.gz   编译安装 # cd rsync-2.5.6/  # ./configure --pref ...

  6. 9、Cocos2dx 3.0游戏开发找小三之工厂方法模式与对象传值

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27704153 工厂方法模式 工厂方法是程序设计中一个 ...

  7. 移动web:图片切换(焦点图)

    在web页面上图片切换(焦点图)效果实在是太常见了,PC端.移动端到处都有它的身影. 上次写了个tab选项卡的效果,在这里延续一下,改成图片切换的效果. 如果不需要自动播放,稍微修改下html标签.和 ...

  8. 自己写的sql排序

    create function dbo.Fn_Sort (  @str varchar(1024) ) returns nvarchar(100) as begin declare @tb table ...

  9. HTML5之Canvas影片广场

    HTML5之Canvas影片广场 1.设计源代码 <!DOCTYPE html> <head> <meta charset="utf-8" /> ...

  10. 微信小程序开发者工具集合包

    开发论坛 http://www.henkuai.com/forum-56-1.html 工具包下载  https://yunpan.cn/ckXFpuzAeVi2s  访问密码 b4cc 开发文档 h ...