我正在为Windows Phone 7编写一个增强现实应用程序作为学校项目。我想获取相机输出,然后在其上添加一层数据。有没有办法让相机输出显示在面板中?
答案 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的功能已列入路线图。