PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Capture d'une photo d'un smartphone avec Windev Mobile
Capture d'une photo d'un smartphone avec Windev Mobile
Débuté par Christian Robert, 28 sep. 2006 16:24 - 12 réponses
Posté le 28 septembre 2006 - 16:24
Est-il possible de capturer une photo (voire une vidéo) à partir de la caméra d'un smartphone, directement depuis une application widev mobile ?
Posté le 28 septembre 2006 - 18:33
alors le probleme est le meme que pour enregistré un son sous wm2003 :
il faut passer par des DLL fabricants, sous wm5 apparament il devrait avoir des API mais bon reste à savoir comment les exploitées...
a mon avis ce n'est pas simple sinon on aurait les fonctions sous windev mobile...
Stef
Posté le 02 octobre 2006 - 18:27
stef a écrit :
alors le probleme est le meme que pour enregistré un son sous wm2003 :
il faut passer par des DLL fabricants, sous wm5 apparament il devrait avoir des API mais bon reste à savoir comment les exploitées...
a mon avis ce n'est pas simple sinon on aurait les fonctions sous windev mobile...
Stef



Bonjour,

Je débute en Windev Mobile, Et je cherche également une solution pour me
servir de l'appareil photo intégré des PDA en Windev Mobile.
Toutes les réponses parlent d’API WM5… Mais comment le faire Windev ?
Impossible de trouver un bout de code exemple…
Il y a des explications sur
http://www.microsoft.com/france/msdn/mobilite/MED307_MSDN_Intro_New_WM5_Native_API.mspx…
Qui parlent d’une fonction SHCameraCapture mais je suis incapable de le
traduire en windev. Quelqu’un a-t-il d’autres pistes ?
Posté le 05 octobre 2006 - 10:39
Bon, j'ai la doc de Microsoft sur cette API SHCamaraCapture qui fait partie de la DLL "CF1Camera.dll" (je l'ai trouvé là http://www.toddm.net/clog/).
Cette API a un paramètre shcc dont la structure est de type SHCAMERACAPTURE. Cette fonction renvoie un résultat hr de type HRESULT.
Il faudrait donc utiliser, avec Windev Mobile, hr = API("CF1Camera.dll","SHCameraCapture",&shcc)
et tester le résultat hr pour vérifier que tout s'est bien passé.
Ensuite, je manque de compétence sur la manipulation des API Windows Mobile avec Windev Mobile pour aller plus loin...
ps : pour tester cette fonction, il faut impérativement le faire sur le smartphone et non sur l'émulateur car ça ne marche pas
Merci de votre contribution pour parvenir à exploiter cette fonction.
Posté le 09 octobre 2006 - 22:05
Christian Robert a écrit :
Bon, j'ai la doc de Microsoft sur cette API SHCamaraCapture qui fait partie de la DLL "CF1Camera.dll" (je l'ai trouvé là http://www.toddm.net/clog/).
Cette API a un paramètre shcc dont la structure est de type SHCAMERACAPTURE. Cette fonction renvoie un résultat hr de type HRESULT.
Il faudrait donc utiliser, avec Windev Mobile, hr = API("CF1Camera.dll","SHCameraCapture",&shcc)
et tester le résultat hr pour vérifier que tout s'est bien passé.
Ensuite, je manque de compétence sur la manipulation des API Windows Mobile avec Windev Mobile pour aller plus loin...
ps : pour tester cette fonction, il faut impérativement le faire sur le smartphone et non sur l'émulateur car ça ne marche pas
Merci de votre contribution pour parvenir à exploiter cette fonction.




J'ai l'impression que la dll a utiliser est plutôt : aygshell.dll.
( Voir
http://windowsmobilepro.blogspot.com/2006/04/how-to-use-new-camera-api-in-windows.html)

En regardant un peu ce qui se fait en C, j’ai essayé de recopier la
structure en Windev, de lui affecter des valeurs, et de la passer en
paramètre…

Voila le bout de code que cela donne :

STSHCameraCapture est une structure
cbSize est un entier //Type C : DWORD
hwndOwner est un entier //Type C : HWND
szFile est une chaîne // ? entier dans wdapi , mais pas logique. Type C
: TCHAR
pszInitialDir est une chaîne //?entier dans wdapi.Type C:LPCTSTR
pszDefaultFileName est une chaîne //?entier dans wdapi.Type C: LPCTSTR
pszTitle est une chaîne // ? entier dans wdapi. Type C : LPCTSTR
StillQuality est un entier //Type CAMERACAPTURE_STILLQUALITY
VideoTypes est un entier //Type CAMERACAPTURE_VIDEOTYPES
nResolutionWidth est un entier //Type C : DWORD
nResolutionHeight est un entier //Type C : DWORD
nVideoTimeLimit est un entier //Type C : DWORD
Mode est un entier //Type CAMERACAPTURE_MODE
FIN

shcc est une STSHCameraCapture
shcc:cbSize = Taille(&shcc)
shcc:hwndOwner = Handle()
shcc:pszInitialDir = "\\My Documents"
shcc:pszDefaultFileName = "test.jpg"
shcc:pszTitle = "Camera Demo"
shcc:VideoTypes = 0
shcc:nResolutionWidth = 176
shcc:nResolutionHeight = 144
shcc:nVideoTimeLimit = 15
shcc:Mode = 0

resultat est un entier
resultat = API("aygshell.dll","SHCameraCapture",&shcc)
Info (resultat)
Info (ErreurInfo(errCodeSystème))
Info (ErreurInfo(errMessageSystème))



Sur mon PDA (spv m600), j'ai les réponses suivantes aux différents info() :
1
6
"Handle non valide"

Donc, comment traduire le : "hwndOwner" du C ?
Posté le 25 janvier 2010 - 23:11
Bonjour,
Avez vous trouvé une solution à votre problème ?
Je serais également intéressé.

Merci
Posté le 27 janvier 2010 - 11:13
Bonjour à tous,

Je me suis penché sur ce sujet il y a pas mal de temps déjà.

Il faut bien utiliser la DLL "aygshell.dll" et la structure SHCameraCapture

Atention la variable "szFile" (MSDN) est un tableau fixe de 1 par 260 caractères en Windev.

Voici les déclarations que j'ai et qui fonctionnent:

//Déclaration des chaines
sChaine_pszInitialDir est une chaîne = "\My Documents" //Chemin de destination : attention, un seul "\"
sChaine_pszDefaultFileName est une chaîne = "Picture.JPG"//Nom du fichier image
sChaine_pszTitle est une chaîne = "Ma photo" // Titre à aficher dans l'execution du programme caméra

// Déclaration de la structure SHCAMERACAPTURE
SHCAMERACAPTURE est une structure
cbSize est un entier sur 4 octets //Type C : DWORD
hwndOwner est un entier sur 4 octets //Type C : HWND
szFile est une tableau fixe de 1 par 260 caractères //Type C : TCHAR
pszInitialDir est un entier sur 4 octets //Type C : LPCTSTR
pszDefaultFileName est un entier sur 4 octets = 0//Type C : LPCTSTR
pszTitle est un entier sur 4 octets //Type C : LPCTSTR
StillQuality est un entier sur 4 octets //Type CAMERACAPTURE_STILLQUALITY non retrouvé (entier est le type le plus fréquent, mais à VERIFIER)
VideoTypes est un entier sur 4 octets//Type CAMERACAPTURE_VIDEOTYPES non retrouvé (entier est le type le plus fréquent, mais à VERIFIER)
nResolutionWidth est un entier sur 4 octets //Type C : DWORD
nResolutionHeight est un entier sur 4 octets //Type C : DWORD
nVideoTimeLimit est un entier sur 4 octets //Type C : DWORD
Mode est un entier sur 4 octets //Type CAMERACAPTURE_MODE non retrouvé (entier est le type le plus fréquent, mais à VERIFIER)
FIN

//Déclaration de la Variable composée
stMaPhoto est un SHCAMERACAPTURE
//assignation des valeurs dans la structure
stMaPhoto:hwndOwner = Handle(FEN_Fenêtre1) //handle de la fenetre d'appel. MSDN dit que ça peut etre null mais bon...
stMaPhoto:pszInitialDir = &sChaine_pszInitialDir //"\My Documents" pour rappel
stMaPhoto:pszDefaultFileName = &sChaine_pszDefaultFileName // "PictureFile.JPG" pour rappel
stMaPhoto:pszTitle = &sChaine_pszTitle //"Ma Photo"
stMaPhoto:StillQuality = 0 // 0 par défaut, 1 pour Low, 2 pour Normal 3 pour high
stMaPhoto:VideoTypes = 0x0000 // pour une photo ! on aurait aussi pu mettre 0 tout simplement
stMaPhoto:nResolutionWidth = 176 //réso horizontale
stMaPhoto:nResolutionHeight = 144 //réso verticale
stMaPhoto:nVideoTimeLimit = 0 //durée en seconde pour une video
stMaPhoto:Mode = 0 //0 pour une photo, 1 pour video seulement, 2 pour video avec audio
stMaPhoto:cbSize = Dimension(stMaPhoto)



Ensuite il suffit d'utiliser l'API SHCameraCapture puis récupérer le chemin de l'image caractère par caractère :

j est un entier
sCheminImage est une chaîne // chemin complet de la photo prise.
//on caste le tablau de caractères pour en constituer une chaine
POUR j=1 A 260
sCheminImage = sCheminImage + stMaPhoto:szFile[1][j]
SI Droite(sCheminImage,4) = ".JPG" ALORS SORTIR
FIN
Posté le 17 mars 2014 - 11:38
Bonjour,

Je dépoussière le post !

Je dois utiliser l'appareil photo d'un terminal windows mobile.

J'utilise le code donné par Laurent. Mon application se lance bien, je prend une photo mais elle ne s'enregistre pas j'ai surement oublié quelque chose mais quoi ?
Voici mon code :
//Déclaration des chaines
sChaine_pszInitialDir est une chaîne = fRepExe() +["\"]+ "Images\" //Chemin de destination : attention, un seul "\"
sChaine_pszDefaultFileName est une chaîne = ChaîneConstruit("MaPhoto_%1_%2.jpg", DateDuJour(), Maintenant())//Nom du fichier image
sChaine_pszTitle est une chaîne = "Ma photo" // Titre à aficher dans l'execution du programme caméra

// Déclaration de la structure SHCAMERACAPTURE
SHCAMERACAPTURE est une structure
cbSize est un entier sur 4 octets //Type C : DWORD
hwndOwner est un entier sur 4 octets //Type C : HWND
szFile est une tableau fixe de 1 par 260 caractères //Type C : TCHAR
pszInitialDir est un entier sur 4 octets //Type C : LPCTSTR
pszDefaultFileName est un entier sur 4 octets //= 0//Type C : LPCTSTR
pszTitle est un entier sur 4 octets //Type C : LPCTSTR
StillQuality est un entier sur 4 octets //Type CAMERACAPTURE_STILLQUALITY non retrouvé (entier est le type le plus fréquent, mais à VERIFIER)
VideoTypes est un entier sur 4 octets//Type CAMERACAPTURE_VIDEOTYPES non retrouvé (entier est le type le plus fréquent, mais à VERIFIER)
nResolutionWidth est un entier sur 4 octets //Type C : DWORD
nResolutionHeight est un entier sur 4 octets //Type C : DWORD
nVideoTimeLimit est un entier sur 4 octets //Type C : DWORD
Mode est un entier sur 4 octets //Type CAMERACAPTURE_MODE non retrouvé (entier est le type le plus fréquent, mais à VERIFIER)
FIN

//Déclaration de la Variable composée
stMaPhoto est un SHCAMERACAPTURE
//assignation des valeurs dans la structure
//stMaPhoto:hwndOwner = Handle(FEN_APN) //handle de la fenetre d'appel. MSDN dit que ça peut etre null mais bon...
stMaPhoto:hwndOwner = Null //handle de la fenetre d'appel. MSDN dit que ça peut etre null mais bon...
stMaPhoto:pszInitialDir = &sChaine_pszInitialDir //"\My Documents" pour rappel
stMaPhoto:pszDefaultFileName = &sChaine_pszDefaultFileName // "PictureFile.JPG" pour rappel
stMaPhoto:pszTitle = &sChaine_pszTitle //"Ma Photo"
stMaPhoto:StillQuality = 3 // 0 par défaut, 1 pour Low, 2 pour Normal 3 pour high
stMaPhoto:VideoTypes = 0x0000 // pour une photo ! on aurait aussi pu mettre 0 tout simplement
stMaPhoto:nResolutionWidth = 176 //réso horizontale
stMaPhoto:nResolutionHeight = 144 //réso verticale
stMaPhoto:nVideoTimeLimit = 0 //durée en seconde pour une video
stMaPhoto:Mode = 0 //0 pour une photo, 1 pour video seulement, 2 pour video avec audio
stMaPhoto:cbSize = Dimension(stMaPhoto)

//utilisation de l'API
API("aygshell","SHCameraCapture",&stMaPhoto)

j est un entier
sCheminImage est une chaîne // chemin complet de la photo prise.
//on caste le tablau de caractères pour en constituer une chaine
POUR j=1 A 260
sCheminImage = sCheminImage + stMaPhoto:szFile[1][j]
SI Droite(sCheminImage,4) = ".JPG" ALORS SORTIR
FIN


Merci pour vos réponses
Posté le 17 mars 2014 - 13:41
Bonjour,

A partir de quel endroit est-ce que le code dysfonctionne ?

Laurent
Membre enregistré
7 messages
Posté le 17 mars 2014 - 14:39
Bonjour,

Et bien mon tableau szFile est vide. Il ne contient pas l'adresse de mon image.
Voilà où j'en suis :
sHInst est un entier //Contient l'instance de la DLL
nRslt est un entier //Resultat de l'execution de la DLL
sHInst = ChargeDLL("aygshell.DLL")
MoiMême..Plan = 1

//Déclaration des chaines
sChaine_pszInitialDir est une chaîne = fRepExe() +["\"]+ "Images\" //Chemin de destination : attention, un seul "\"
sChaine_pszDefaultFileName est une chaîne = ChaîneConstruit("MaPhoto_%1_%2.jpg", DateDuJour(), Maintenant())//Nom du fichier image
sChaine_pszTitle est une chaîne = "Ma photo" // Titre à aficher dans l'execution du programme caméra

// Déclaration de la structure SHCAMERACAPTURE
SHCAMERACAPTURE est une structure
cbSize est un entier sur 4 octets //Type C : DWORD
hwndOwner est un entier sur 4 octets //Type C : HWND
//szFile est une tableau fixe de 1 par 260 caractères //Type C : TCHAR
szFile est un tableau fixe de 1 par 260 caractères //caractères
pszInitialDir est un entier sur 4 octets //Type C : LPCTSTR
pszDefaultFileName est un entier sur 4 octets //Type C : LPCTSTR
pszTitle est un entier sur 4 octets //Type C : LPCTSTR
StillQuality est un entier sur 4 octets //Type CAMERACAPTURE_STILLQUALITY non retrouvé (entier est le type le plus fréquent, mais à VERIFIER)
VideoTypes est un entier sur 4 octets//Type CAMERACAPTURE_VIDEOTYPES non retrouvé (entier est le type le plus fréquent, mais à VERIFIER)
nResolutionWidth est un entier sur 4 octets //Type C : DWORD
nResolutionHeight est un entier sur 4 octets //Type C : DWORD
nVideoTimeLimit est un entier sur 4 octets //Type C : DWORD
Mode est un entier sur 4 octets //Type CAMERACAPTURE_MODE non retrouvé (entier est le type le plus fréquent, mais à VERIFIER)
FIN

//Déclaration de la Variable composée
stMaPhoto est un SHCAMERACAPTURE
//assignation des valeurs dans la structure
//stMaPhoto:hwndOwner = Handle(FEN_APN) //handle de la fenetre d'appel. MSDN dit que ça peut etre null mais bon...
stMaPhoto:hwndOwner = Null //handle de la fenetre d'appel. MSDN dit que ça peut etre null mais bon...
stMaPhoto:pszInitialDir = &sChaine_pszInitialDir //"\My Documents" pour rappel
stMaPhoto:pszDefaultFileName = &sChaine_pszDefaultFileName // "PictureFile.JPG" pour rappel
stMaPhoto:pszTitle = &sChaine_pszTitle //"Ma Photo"
stMaPhoto:StillQuality = 3 // 0 par défaut, 1 pour Low, 2 pour Normal 3 pour high
stMaPhoto:VideoTypes = 0x0000 // pour une photo ! on aurait aussi pu mettre 0 tout simplement
stMaPhoto:nResolutionWidth = 176 //réso horizontale
stMaPhoto:nResolutionHeight = 144 //réso verticale
stMaPhoto:nVideoTimeLimit = 0 //durée en seconde pour une video
stMaPhoto:Mode = 0 //0 pour une photo, 1 pour video seulement, 2 pour video avec audio
stMaPhoto:cbSize = Dimension(stMaPhoto)



SI sHInst = 0 ALORS
Erreur("Erreur lçors du chargement")
SINON
nRslt = AppelDLL32("aygshell","SHCameraCapture",&stMaPhoto)

//API(hInst,"SHCameraCapture",&stMaPhoto)
j est un entier
sCheminImage est une chaîne // chemin complet de la photo prise.
//on caste le tablau de caractères pour en constituer une chaine
POUR j=1 A 260
sCheminImage = sCheminImage + stMaPhoto:szFile[1][j]
SI sCheminImage<>"" ALORS Info(sCheminImage)
SI Droite(sCheminImage,4) = ".JPG" ALORS SORTIR
FIN
DéchargeDLL(sHInst)
FIN


--
Merci pour vôtre attention.
J'en ferai de même une fois devenue grand (développeur).
Membre enregistré
7 messages
Posté le 17 mars 2014 - 15:04
J'ai trouvé mon erreur... Le programme marche très bien !
J'appuyais sur "OK" dans le menu au lieu d'appuyer sur la touche "entrer".

Oui, je me sens très bête.

En tout cas merci beaucoup Laurent ! Ton code est très précieux.

Cordialement,
Nicolas Saboureau

--
Merci pour vôtre attention.
J'en ferai de même une fois devenue grand (développeur).
Posté le 17 mars 2014 - 23:04
Ça arrive à tout le monde, même aux meilleurs !

Bon devs.
Membre enregistré
7 messages
Posté le 18 mars 2014 - 14:44
Encore moi...

Aurais-tu une idée s'il est possible de désactiver et/ou personnaliser le menu de la caméra ?

Merci pour le temps que tu m'accordes.

--
Merci pour vôtre attention.
J'en ferai de même une fois devenue grand (développeur).