在Windows Phone 7中显示相机输出

时间:2010-10-26 22:17:43

标签: windows-phone-7 camera augmented-reality

我正在为Windows Phone 7编写一个增强现实应用程序作为学校项目。我想获取相机输出,然后在其上添加一层数据。有没有办法让相机输出显示在面板中?

5 个答案:

答案 0 :(得分:7)

仅供参考:在Windows Phone SDK 7.1(a.k.a。“Mango”)中,您现在可以编写使用设备相机的应用程序。有关最新7.1开发工具的链接,请参阅App Hub。该文档描述了如何在以下链接中执行此操作:

How to: Create a Base Camera Application for Windows Phone

但基本上,添加一个videobrush来显示相机输入(例如“取景器”)。例如,这里使用矩形控件显示相机取景器:

    <!--Camera viewfinder >-->
    <Rectangle Width="640" Height="480" 
               HorizontalAlignment="Left" 
               x:Name="viewfinderContainer">

        <Rectangle.Fill>
            <VideoBrush x:Name="viewfinderBrush" />
        </Rectangle.Fill>
    </Rectangle>

要在页面的代码隐藏中使用相机,请添加对Microsoft.XNA.Framework的引用,并在页面顶部放置以下Using语句:

// Directives
using Microsoft.Devices;
using System.IO;
using System.IO.IsolatedStorage;
using System.Windows.Media.Imaging;
using Microsoft.Xna.Framework.Media;

注意:您可能不需要所有这些,我只是从文档中复制它。在Visual Studio(至少是Pro)中,您可以在完成后通过右键单击代码文件并单击以下内容进行清理:组织使用 | 删除未使用的使用

然后,基本上你将相机图像应用于 OnNavigatedTo 处理程序中的矩形......

    //Code for initialization and setting the source for the viewfinder
    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {

        // Initialize camera
        cam = new Microsoft.Devices.PhotoCamera();

        //Set the VideoBrush source to the camera.
        viewfinderBrush.SetSource(cam);
    }

...并在 OnNavigatingFrom 中处理相机对象。

    protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
    {
        // Dispose camera to minimize power consumption and to expedite shutdown.
        cam.Dispose();

        // Good place to unhook camera event handlers too.
    }

7.1文档还描述了以下主题中的增强现实应用程序。请注意,您需要向下滚动到标题为 创建基于Silverlight的增强现实应用程序 的部分,以查找使用Mango构建它的说明。

How to: Use the Combined Motion API for Windows Phone

希望这也有助于其他人在Windows Phone OS 7.1中寻找有关PhotoCamera的信息。

干杯

答案 1 :(得分:4)

根据微软的UI Design and Interaction Guide [PDF],他们不允许开发人员使用任何UI元素访问摄像头。

这来自第127页:

  

没有直接的UI元素   与相机相关联,但是   开发人员可以访问相机   在Microsoft.Phone.Tasks中   命名空间。

答案 2 :(得分:1)

截至今日(2010年1月19日),您只能正式访问使用CameraCaptureTask拍摄的照片。如果您不打算将您的应用程序提交到市场,那么您可以使用Dan Ardelean和Kevin Marshall概述的Microsoft.Phone.Media.Extended命名空间中的PhotoCamera类。有关详细信息,请参阅this post以获取视频演示,并his blog。请注意,如果您使用这些程序集,您的应用程序将不会通过市场认证,因为它们不是官方SDK的一部分。

答案 3 :(得分:0)

您问题的简短回答是:否。

您可以使用Windows Phone 7 API(here)提供的CameraCaptureTask来捕获照片,但据我所知,您无法从相机捕获实时数据流。

微软尚未宣布该功能是否会在未来版本的平台中得到增强。

使用CameraCaptureTask

的示例
public partial class MainPage : PhoneApplicationPage
{
   // Declare the CameraCaptureTask object with page scope.
   CameraCaptureTask cameraCaptureTask;

   // Constructor
   public MainPage()
   {
      InitializeComponent();

      // Initialize the CameraCaptureTask and assign the Completed handler in the page constructor.
      cameraCaptureTask = new CameraCaptureTask();
      cameraCaptureTask.Completed += new EventHandler<PhotoResult>(cameraCaptureTask_Completed);
   }

   // In this example, the CameraCaptureTask is shown in response to a button click.                
   private void button1_Click(object sender, RoutedEventArgs e)
   {
      cameraCaptureTask.Show();
   }
   // The Completed event handler. In this example, a new BitmapImage is created and
   // the source is set to the result stream from the CameraCaptureTask
   void cameraCaptureTask_Completed(object sender, PhotoResult e)
   {
      if (e.TaskResult == TaskResult.OK)
      {
         BitmapImage bmp = new BitmapImage();
         bmp.SetSource(e.ChosenPhoto);
         myImage.Source = bmp;
      }
   }
}

答案 4 :(得分:0)

如前所述,目前我们仅限于CameraCaptureTask功能。

最近发布的信息表明支持AR的功能已列入路线图。