Prendre une photo automatiquement à l'aide d'une webcam en C# à l'aide de WIA
Je suis en utilisant WIALib pour accéder à ma webcam. Le code je suis en développement est assez simple: lorsqu'un bouton est appuyé, une webcam photo est prise, et ensuite affichée dans une zone de l'image.
Je peux déjà prendre des photos avec ma webcam, mais il n'est pas encore entièrement automatisé. Le seul moyen que j'ai trouvé pour récupérer les images prises par la webcam, est l'utilisation de ce:
wiaPics = wiaRoot.GetItemsFromUI( WiaFlag.SingleImage, WiaIntent.ImageTypeColor ) as CollectionClass;
Mais cela demande à l'utilisateur de sélectionner l'image. Et je veux toujours la dernière photo prise. Je suis donc d'essayer cette façon:
string imageFileName = Path.GetTempFileName(); //create temporary file for image
wiaItem = wiaRoot.TakePicture(); //take a picture
Cursor.Current = Cursors.WaitCursor; //could take some time
this.Refresh();
wiaItem.Transfer(imageFileName, false); //transfer picture to our temporary file
pictureBox1.Image = Image.FromFile(imageFileName); //create Image instance from file
Marshal.ReleaseComObject(wiaItem);
Mais la méthode TakePicture() renvoie la valeur null, et donc je ne peux pas transférer l'image. La chose la plus étrange c'est que la photo a vraiment été prise après la méthode TakePicture() a été appelée, car si je vais à la webcam manuellement la photo est là! Je ne vois pas pourquoi il ne retourne pas une valeur.
Pour résumer, j'ai besoin d'un de ces deux:
1. Obtenir TakePicture() pour travailler en renvoyant une valeur que je peux utiliser.
2. Accéder à la liste de la webcam automatiquement les photos, afin que je puisse récupérer la dernière photo prise.
Meilleures salutations et merci pour l'aide, Micael.
OriginalL'auteur Micael | 2010-11-29
Vous devez vous connecter pour publier un commentaire.
De ce que je peux voir,
wiaItem = wiaRoot.TakePicture()
va dans le mauvais chemin. Essayez ceci:TakePicture enregistre une image à un fichier, et retourne le nouveau nom de fichier comme paramètre de sortie.
Modifier par votre commentaire - êtes-vous à l'aide de la "version de windows 7" de WiaLib? Si oui, essayez quelque chose comme ceci:
où vous utilisez le ExecuteCommand avec le bien connu guid (également exposés à partir de la COM interop wrapper) plutôt que de TakePicture. Il a travaillé pour ma webcam, en tout cas.
si vous êtes sur le plus récent, voir si mon montage va travailler pour vous.
Je ne connais pas la version de mon WiaLib. Je travaille sous windows xp Pro et Visual Studio 2010. Quand j'ai collé le code, la classe DeviceManagerClass et de l'Appareil n'étaient pas reconnues. Ai-je besoin d'ajouter une autre référence, autres que WiaLib? Merci encore 🙂
Assurez-vous que vous ajoutez une référence COM "Windows Image Acquisition Bibliothèque 2.0".
Device
devrait être dans la WIA espace de noms - assurez-vous que vous avezusing WIA
. Vous devriez alors être en mesure de trouverWIA.DeviceManagerClass
.Eh bien, je suppose que je ne suis pas en utilisant la version windows 7 de WIA, puisque je n'ai que "Microsoft Windows Image Acquisition 1.01 Bibliothèque de Type".
OriginalL'auteur Philip Rieck