Definir la resolution d'une webcam avec IAMStreamConfig

Résolu
Signaler
Messages postés
32
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
13 janvier 2009
-
Messages postés
32
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
13 janvier 2009
-
Bonjour,

Voici mon but ! : afficher en plein ecran l'image de ma webcam utilisant la resolution max (1600x1200).
J'arrive à afficher l'image en plein ecran mais uniquement avec la configuration par defaut de la webcam.
J'ai essaye d'utiliser la dll avicap32 mais elle est limite en resolution à 640x480, idem avec la dll wia.
Je me suis donc dirige vers le directX et j'utilise à present la dll DShowNet.
J'arrive à recuperer la resolution à l'aide de la boite de dialogue ShowCapPinDialog. Je voudrais à present ne plus passer par cette boite de dialogue. J'ai effectue des recherches sur internet et j'ai trouve differentes sources mais je n'y arrive toujours pas. J'ai essaye de recuperer les infos avec GetNumberOfCapabilities, GetFormat mais il faut utiliser des pointeurs et il apparait des erreurs comme quoi cela n'est pas possible car c'est du code managé.

Je ne connais pas du tout le directX et je voulais savoir si quelqu'un peut me fournir des pistes ou eventuellement un bout de code.

Merci d'avance.

Stephan.

4 réponses

Messages postés
32
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
13 janvier 2009

Salut,

J'ai trouve une autre solution pour recuperer/modifier la resolution de la camera. J'utilise la dll Directx.capture avec la librairie DShowNET.

Pour modifier la resolution il suffit d'utiliser la methode framesize.

Voici la source qui m'a permis de solutionner mon probleme.

http://www.codeproject.com/KB/directx/directxcapture.aspx
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
5
T'as plusieurs solutions.

La plus simple: programmer tout en C++ ;)
La 2nde: créer une DLL C++ managé qui gère le code DirectX en natif et qui te renvoit dans ton programme du code managé.
La 3ème: créer une DLL C++ qui gère le code DirectX et que tu appelle dans ton programme à grand coup de DllImport.
Messages postés
32
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
13 janvier 2009

Salut,

J'avais pensé à ce genre de possibilités mais je ne savais pas si cela était possible. On est obligé de passer par du code c ou c++ pour contourner le probleme ? Il ni a aucun moyen d'utiliser le C# ?

Donc, pour resumer un peu la situation, si je cree ma propre dll, il y aura une fonction qui me renverrait genre un int de la resolution de ma webcam et si je veux definir la resolution il y aura une fonction ds ma dll qui aura comme argument deux int correspondant à la resolution souhaitee et c'est le code en C++ qui va communiquer avec la webcam ?

Merci.

Stéphan
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
5
Bein a moins que tu trouve une librairie .NET pour gérer les webcams, non il n'y a pas de moyen en c#.

Mais il faut bien voir que la DLL C++ managé c'est vraiment une solution plutot élégante. En ajoutant ce projet à ta solution, l'utilisation est totalement transparente, t'as l'impression d'utiliser des fonctions .NET normales, et tout le code natif qui tourne derrière t'es totalement caché.

Pour te mettre un peu en jambe, ajoute un projet de DLL C++ managé à ta solution. Le code natif doit s'éxécuter entre #pragma unmanaged/managed.