Вывод изображения с камеры в Windows Phone 7 - PullRequest
3 голосов
/ 27 октября 2010

Я пишу приложение дополненной реальности для Windows Phone 7 как школьный проект.Я хочу получить вывод с камеры, а затем добавить слой данных поверх него.Есть ли способ, чтобы вывод камеры отображался на панели?

Ответы [ 5 ]

7 голосов
/ 14 июля 2011

К вашему сведению: в Windows Phone SDK 7.1 (он же «Манго») вы можете теперь писать приложения, которые используют камеру устройства, как вы описали.См. App Hub для ссылки на последние инструменты разработки 7.1.Документация описывает, как сделать это по следующей ссылке:

Как: создать приложение базовой камеры для Windows Phone

Но в основном добавьте кисть видео, чтобы отобразитьПодача с камеры (или «видоискатель»).Например, здесь используется прямоугольный элемент управления для отображения видоискателя камеры:

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

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

Чтобы использовать камеру в коде для этой страницы, добавьте ссылку на Microsoft.XNA.Framework и добавьте следующее:заявления в верхней части страницы:

// 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.

Как: использовать API Combined Motion для Windows Phone

Надеюсь, что это также поможет другим, ищущим информацию о PhotoCamera в ОС Windows Phone 7.1.

Приветствия

4 голосов
/ 27 октября 2010

Согласно Microsoft Руководство по проектированию и взаимодействию пользовательского интерфейса [PDF], они не позволяют разработчикам получать доступ к камере с любыми элементами интерфейса.

Это происходит на стр. 127:

Нет прямых элементов интерфейса связано с камерой, но разработчики имеют доступ к камере в Microsoft.Phone.Tasks Пространство имен.

1 голос
/ 20 января 2011

На сегодняшний день (19.01.2010) вы официально имеете доступ только к фотографиям, сделанным с помощью CameraCaptureTask.Если вы не планируете подавать свою заявку на рынок, вы можете использовать класс PhotoCamera из пространства имен Microsoft.Phone.Media.Extended, как это описано Дэном Арделеаном и Кевином Маршаллом.Смотрите этот пост для демонстрации видео и его блог для более подробной информации.Обратите внимание, что ваше приложение не пройдет сертификацию торговой площадки, если вы используете эти сборки, поскольку они не являются частью официального SDK.

0 голосов
/ 27 октября 2010

Как уже отмечалось, на данный момент мы ограничены функциональностью CameraCaptureTask.

Недавно была выпущена информация, указывающая, что функциональность для поддержки AR включена в план.

0 голосов
/ 27 октября 2010

Краткий ответ на ваш вопрос: нет.

Вы можете снимать фотографии, используя CameraCaptureTask, предоставляемый Windows Phone 7 API ( здесь ), но, насколько мне известно, вы не можете захватить прямой поток данных с камеры.

Microsoft не объявила, будет ли эта функция расширена в будущем выпуске платформы.

Пример использования 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;
      }
   }
}
...