2010-10-26 5 views
3

J'écris une application de réalité augmentée pour Windows Phone 7 en tant que projet scolaire. Je veux obtenir la sortie de la caméra, puis ajouter une couche de données dessus. Est-il possible d'afficher la sortie de la caméra dans un panneau?Afficher la sortie de la caméra sous Windows Phone 7

+1

Ne le pensez pas. Vous pouvez demander à ce qu'une photo soit prise par l'appareil photo, mais vous n'avez pas d'accès brut à l'appareil photo. –

Répondre

7

FYI: Dans Windows Phone SDK 7.1 (par exemple, "Mango"), vous pouvez désormais écrire des applications qui utilisent la caméra de l'appareil telle que décrite. Voir App Hub pour un lien vers les derniers outils de développement 7.1. La documentation décrit comment faire le lien suivant:

How to: Create a Base Camera Application for Windows Phone

Mais au fond, ajoutez un videobrush pour afficher l'alimentation de la caméra (le a.k.a. « viseur »). Par exemple, voici un contrôle rectangle affichage utilisé le viseur de la caméra:

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

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

Pour utiliser l'appareil photo dans le code-behind de la page, ajouter une référence à Microsoft.XNA.Framework et mettre les suivantes à l'aide des déclarations à haut de la page:

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

Remarque: vous ne pouvez pas besoin de tout cela, je viens recopié des docs.Dans Visual Studio (Pro, au moins), vous pouvez les nettoyer une fois que vous avez terminé en cliquant avec le bouton droit sur votre fichier de code et en cliquant sur: Organize Usings | Supprimer les utilisations inutilisées.

Ensuite, au fond vous appliquez l'image de la caméra au rectangle dans le gestionnaire 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); 
    } 

... et disposer de l'objet de la caméra dans le 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. 
    } 

Les documents 7.1 décrivent également une application de réalité augmentée dans la section suivante. Notez que vous devrez faire défiler jusqu'à la section intitulée Création d'une application de réalité augmentée basée sur Silverlight, pour trouver les instructions de construction avec Mango.

How to: Use the Combined Motion API for Windows Phone

espoir qui aide aussi à d'autres qui cherchent des informations sur Photocamera dans Windows Phone OS 7.1.

Cheers

0

La réponse courte à votre question est: non.

Vous pouvez capturer des photos en utilisant le CameraCaptureTask fourni par l'API Windows Phone 7 (here), mais, au meilleur de ma connaissance, vous ne pouvez pas capturer un flux de données en direct de la caméra.

Microsoft n'a pas annoncé si cette fonctionnalité sera augmentée dans une future version de la plate-forme.

Exemple d'utilisation 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

Selon UI Design and Interaction Guide de Microsoft [PDF], ils ne permettent pas aux développeurs d'accéder à la caméra avec une interface utilisateur éléments.

Cela vient de la page 127:

Il n'y a pas d'éléments de l'interface utilisateur directe associés à la caméra, mais développeurs ont accès à la caméra dans l'espace de noms Microsoft.Phone.Tasks .

0

Comme indiqué ici, nous sommes limités à la fonctionnalité CameraCaptureTask pour le moment.

Des informations ont été publiées récemment pour indiquer la fonctionnalité de prise en charge de la RA.

1

A compter d'aujourd'hui (19/01/2010) vous avez seulement officiellement accès aux photos prises en utilisant CameraCaptureTask. Si vous ne prévoyez pas de soumettre votre demande sur le marché, vous pouvez utiliser la classe PhotoCamera de l'espace de noms Microsoft.Phone.Media.Extended tel que décrit par Dan Ardelean et Kevin Marshall. Voir this post pour une démo vidéo et his blog pour plus de détails. Veuillez noter que votre demande ne passera pas la certification du marché si vous utilisez ces assemblys car ils ne font pas partie du SDK officiel.

+0

cette réponse est assez obsolète..voir ci-dessous – Gluip