这个项目不是用的系统自带的CameraCaptureUI。是自己写的摄像头的调用,界面做的不好所以,不放了。可是能够实现拍照功能:

以下是using 程序命名空间:

  1. using Windows.Media.Capture;
  2. using Windows.Media.MediaProperties;
  3. using Windows.UI.Xaml.Media.Imaging;
  4. using Windows.Storage;
  5. using Windows.Storage.Pickers;
  6. using Windows.Storage.Streams;
  7. using Windows.Devices.Enumeration;

能够看看win8 引用中这些方法的调用情况,

以下是全局变量:

  1. <span style="white-space:pre"> </span>private StorageFile file = null;
  2. private StorageFile photo = null;
  3. private StorageFile video = null;
  4. private MediaCapture mediaPhoto = null;
  5. private MediaCapture mediaVideo = null;
  6. private bool cameraStarted = false;

首先我们不调用系统自带的摄像头方法CameraCaptureUI,我们能够使用第二种方法,以下是调用摄像头的触发方法:

  1. private async void btnCamera_Click(object sender, RoutedEventArgs e)
  2. {
  3. try
  4. {
  5. DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
  6. if (devices.Count > 0)
  7. {
  8. if (mediaPhoto == null)
  9. {
  10. mediaPhoto = new MediaCapture();
  11. await mediaPhoto.InitializeAsync();
  12. capture1.Source = mediaPhoto;
  13. await mediaPhoto.StartPreviewAsync();
  14. cameraStarted = true;
  15. }
  16. }
  17. }
  18. catch (Exception msg)
  19. {
  20. mediaPhoto = null;
  21. }
  22. }

调用了摄像头,还要求实现拍照的功能:

  1. <span style="white-space:pre"> </span>private async void btnPhoto_Click(object sender, RoutedEventArgs e)
  2. {
  3. if (mediaPhoto != null)
  4. {
  5. ImageEncodingProperties imgFormat = ImageEncodingProperties.CreateJpeg();
  6. photo = await ApplicationData.Current.LocalFolder.CreateFileAsync("hello.jpg", CreationCollisionOption.GenerateUniqueName);
  7. await mediaPhoto.CapturePhotoToStorageFileAsync(imgFormat, photo);
  8. }
  9. }

上面是拍照的触发方法。

我们程序还要求实现将拍好的照片保存好,这个还要求一个触发方法:

  1. <span style="white-space:pre"> </span>private async void photoSave_Click(object sender, RoutedEventArgs e)
  2. {
  3. if (photo != null)
  4. {
  5. FileSavePicker photoPicker = new FileSavePicker();
  6. photoPicker.CommitButtonText = "保存图片";
  7. photoPicker.SuggestedFileName = "hello";
  8. photoPicker.FileTypeChoices.Add("图片",new string[]{".jpg",".jpeg",".png",".bmp"});
  9. photoPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
  10. StorageFile photoFile = await photoPicker.PickSaveFileAsync();
  11. if (photoFile != null)
  12. {
  13. //打开通过摄像头拍摄的照片。并返回流,以流的形式读取文件
  14. var streamRandom = await photo.OpenAsync(FileAccessMode.Read);
  15. //将拍摄的照片以流的形式读取到缓冲区
  16. IBuffer buffer = RandomAccessStreamToBuffer(streamRandom);
  17. //将缓冲区内容写入对应的目录中
  18. await FileIO.WriteBufferAsync(photoFile, buffer);
  19. }
  20. }
  21. }

以下是自己写的两个函数:

  1. //将图片写入到缓冲区
  2. private IBuffer RandomAccessStreamToBuffer(IRandomAccessStream randomstream)
  3. {
  4. Stream stream = WindowsRuntimeStreamExtensions.AsStreamForRead(randomstream.GetInputStreamAt(0));
  5. MemoryStream memoryStream = new MemoryStream();
  6. IBuffer buffer = null;
  7. if (stream != null)
  8. {
  9. byte[] bytes = ConvertStreamTobyte(stream); //将流转化为字节型数组
  10. if (bytes != null)
  11. {
  12. var binaryWriter = new BinaryWriter(memoryStream);
  13. binaryWriter.Write(bytes);
  14. }
  15. }
  16. try
  17. {
  18. buffer = WindowsRuntimeBufferExtensions.GetWindowsRuntimeBuffer(memoryStream, 0, (int)memoryStream.Length);
  19. }
  20. catch (Exception msg)
  21. {
  22. }
  23. return buffer;
  24. }
  25. //将流转换成二进制
  26. public static byte[] ConvertStreamTobyte(Stream input)
  27. {
  28. byte[] buffer = new byte[1024 * 1024];
  29. using (MemoryStream ms = new MemoryStream())
  30. {
  31. int read;
  32. while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
  33. {
  34. ms.Write(buffer, 0, read);
  35. }
  36. return ms.ToArray();
  37. }
  38. }

能够执行,谢谢大家指正。

win8 metro 自己写摄像头拍照项目的更多相关文章

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

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

  2. android: 调用摄像头拍照

    很多应用程序都可能会使用到调用摄像头拍照的功能,比如说程序里需要上传一张图片 作为用户的头像,这时打开摄像头拍张照是最简单快捷的.下面就让我们通过一个例子来学 习一下,如何才能在应用程序里调用手机的摄 ...

  3. VC/Wince 实现仿Win8 Metro风格界面1——设计概述和自绘Button(附效果图)

    去年用VC做了一个仿Win8 Metro风格的界面,感觉挺有意思,最近打算把实现过程和一些技术原理记录下来. 主要是风格上类似Win8,其实功能上很多借鉴了Android的操作方式.界面只支持两种大小 ...

  4. VS2010开发MFC ActiveX,摄像头拍照上传Webservice(1)

    最近工作项目,BS中需要用到摄像头拍照,需要存储本地,同时上传到服务器,尝试使用vc++做ActiveX来实现. 完全没有使用过vc,上网搜索各种知识,初步完成.在这里记录下有帮助的资料. 第一步:编 ...

  5. C# - VS2019调用AForge库实现调用摄像头拍照功能

    前言 作为一名资深Delphi7程序员,想要实现摄像头扫描一维码/二维码功能,发现所有免费的第三方库都没有简便的实现办法,通用的OpenCV或者ZXing库基本上只支持XE以上的版本,而且一维码的识别 ...

  6. 摄像头拍照,PHP输入流php://input的使用分析

    在做一个摄像头拍照然后上传的功能,php中使用php://input来获取内容.于是就了解了下php://input. 从官网信息来看,php://input是一个只读信息流,当请求方式是post的, ...

  7. 怎样让HTML5调用手机摄像头拍照——实践就是一切

    原文:怎样让HTML5调用手机摄像头拍照--实践就是一切 NanShan 小编将思路提供给了大家.学编程最重要的是实践,我这尽管有完好的代码,可是希望大家都能够自己写出属于自己的代码 HTML5 Th ...

  8. Android开发手记(32) 使用摄像头拍照

    在Android中,使用摄像头拍照一般有两种方法, 一种是调用系统自带的Camera,另一种是自己写一个摄像的界面. 我们要添加如下权限: <uses-permission android:na ...

  9. winform摄像头拍照 C#利用摄像头拍照

    这是我的第一篇博文,决定以后每个程序都要记录下来,方便以后查阅! 本人小菜一名,本程序也是查阅了网上各位前辈的博客和百度知道所整理出来的一个小程序. 第一次写有点不知道从何写起,先贴一张程序图吧. 程 ...

随机推荐

  1. 怎么修改wamp的本地时间

    最近配置了一台wamp环境的服务器,但发现时间与本地时间是地区别的,并且 利用time获取的时间再利用date显示有时差的,下面我们一起来导致原因与解决办法. 如果date时间不一致可以使用date_ ...

  2. python框架---->BeautifulSoup的使用

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.一个人至少拥有一个梦想,有一个理由去坚强.心 ...

  3. JS基础---->javascript的基础(一)

    记录一些javascript的基础知识.只是一起走过一段路而已,何必把怀念弄的比经过还长. javascript的基础 一.在检测一个引用类型值和 Object 构造函数时, instanceof 操 ...

  4. 【Spring源码深度解析学习系列】Bean的加载(六)

    Bean的加载所涉及到的大致步骤: 1)转换对应beanName 为什么需要转换beanName呢?因为传入的参数可能是别名,也可能是FactoryBean,所以需要一系列的解析,这些解析内容包括如下 ...

  5. Windows应急响应操作手册

    查看表征异常 系统卡慢.宕机.CPU和内存占用高.网络拥塞或断网.磁盘空余空间无理由大幅度缩小等,根据以上表征,可以初步猜测系统面临的问题. windows 下查看系统基本信息 PS C:\Users ...

  6. 23种设计模式之模板方法(Template Method)

    模板方法模式是一种类的行为型模式,用于定义一个操作中算法的骨架,而将一些步骤延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,其缺点是对于不同的实现,都需要定义 ...

  7. linux系统下kvm虚拟机的安装

    一 KVM虚拟机简介 KVM是kernel-based Virtual Machine的简称,目前已成为学术界的主流VMM之一.KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术) ...

  8. 关于在Linux下apache-maven的安装

    本文所涉及到的软件如下:jdk版本号:1.7.0_45apache-maven版本号:3.1.1 apache-maven的安装过程如下: apache-maven的官方网址:http://maven ...

  9. 【CF908E】New Year and Entity Enumeration 位运算+DP

    [CF908E]New Year and Entity Enumeration 题意:给定$M=2^m-1$,我们称一个集合S是好的,当且仅当它满足:1.$\forall a\in S,a\  \ma ...

  10. (转)关于如何学好游戏3D引擎编程的一些经验

    此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰 ——阿哲VS自己 QQ79134054多希望大家一起交流与沟通 这篇文章是 ...