Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

empreinte digital avec windev

50 réponses
Avatar
yedaye
Salut
Je d=E9veloppe une application de reconnaissance par empreinte digital
avec windev 10.
J'ai achet=E9 le Microsoft fingerprint reader et j'ai le fingerprint
SDK de Griaule.

Mon probl=E8me est le suivant .

la fonction CapRawImageToHandle est d=E9finie dans le SDK avec les
param=E8tres suivants:

Returns a picture display handle (IPictureDisp) to the supplied raw
grayscale fingerprint image.

Return On success, GR_OK is returned.
On failure, the appropriate error code is returned.

Parameters
[in] rawImage A raw grayscale fingerprint image.

[in] width Fingerprint image width in pixels.

[in] height Fingerprint image height in pixels.

[in] hdc The device context handle (HDC) in which the picture will be
created.

[out] handle The fingerprint picture display handle (IPictureDisp).

Mon code windev est le suivant :

idsensor est une cha=EEne
moncontext, monhdc, monhandle sont des entiers
monimage est un Variant
ActiveX1>>CapInitialize()
ActiveX1>>Initialize()
ActiveX1>>CreateContext(moncontext)
ActiveXEv=E9nement("montest",ActiveX1,"SensorPlug")
ActiveX1>>CapStartCapture(idsensor)
monhdc=3DdD=E9butDessin(Image1)
monhandle=3DHandle(Image1)
ActiveX1>>CapRawImageToHandle(monimage,355,390,monhdc,monhandle)
ActiveX1>>StopCapture(idsensor)

quand je teste, il me met l'erreur suivante :

" En tentant d'invoquer la m=E9thode <CapRawImageToHandle>, l'objet
Automation/ActiveX a renvoy=E9 l'erreur suivante : 'Erreur 80020005,
Type incorrect pour le param=E8tre 5' "

Quelqu'un a une id=E9e?

Merci d'avance

10 réponses

1 2 3 4 5
Avatar
yedaye
Romain tu es un génie.
Merci beaucoup, il y a longtemps que je cherche une application du
genre mais même sur google, le résultat des recherches ne sont pas
explicite.

Là, je vais me mettre à utiliser la dll pour voir ce que sa va donner.

Une dernière question

Dans la dll, j'ai trouvé par exemple pour la fonction d'initialisation

Fonction Name Adress Relative Adress
0x10001010 0x10001010


et dans l'aide de l'SDK, je trouve pour la même fonction défini en C++

C++

int result;
//Initialize the library
result = GrInitialize();

ALors ma question est la suivante : comment sera la syntaxe en
windev .

Moi je pense à :
mavar, mavar2 sont des entiers
mavar=ChargeDLL("C:Program FilesGriauleFingerprint SDK 2007bin
GrFinger.dll")
mavar2=AppelDLL32("GrFinger","")

superbe sa marche.
Je n'ai pas vu les évènements dans la dll, l'aide de l'SDK dit qu'ils
sont sous forme de fonctions callback.

un exemple se présente comme suit :

Déclaration :

C++

typedef void CALLBACK GRCAP_STATUS_EVENT_PROC(char* idSensor,
GRCAP_STATUS_EVENTS event);

Sample Code
C++

void StatusEventHandler(char* idSensor, GRCAP_STATUS_EVENTS event) {
// Signaling that a Status Event occurred.
WriteEvent(idSensor, event);
if (event == GR_PLUG) {
// Start capturing from the plugged reader.
GrCapStartCapture(idSensor, myFingerCallBack, myImageCallBack);
} else if (event == GR_UNPLUG) {
// Stop capturing from the unplugged reader
GrCapStopCapture(idSensor);
}
}

Si je comprend bien, je dois créer une procédure StatusEventHandler ou
plutôt GRCAP_STATUS_EVENT_PROC;
si c'est le cas, ou pourrais-je trouver la fonction StatusEventHandler
car elle n'est dans aucune des dll fournit.

Merci encore pour votre aide.
Avatar
yedaye
Salut Amis développeurs, j'ai beaucoup avancé pendant le week-end et
j'arrive maintenant à initialiser le lecteur, lancer la capture mais
c'est au niveau de la récupération de l'image qu'il y a problème.
La procédure suivante :

PROCEDURE ImageCallback(idsensor est une chaîne="DPMS6C2DB4",largeur
est un entier=0,hauteur est un entier=0, monimg est une chaîne ,resol
est un entier=0)

retourne les caractéristiques de l'image. Elle me retourne bien la
largeur, la hauteur, la résolution de l'image mais pour ce qui est de
l'image brut (monimg) il ne me retourne pas de bonnes valeurs.

Par exemple :
monimg est une chaîne retourne :
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ............;
monimg est un tableau ......, windev refuse de faire passer
un tableau dans une procédure comme variable or cette dernière sera
l'idéale pour récupérer les valeurs de pixels de l'image.;
monimg est un entier, retourne par exemple 52631548;
monimg est un buffer, erreur windev (la variable de type
buffer ne peut être converti en entier);

Avez-vous une idée?
Avatar
Romain PETIT
avait écrit le 16/06/2008 :
Avez-vous une idée?



Tu dois récupérer un tableau d'entiers sur 1 octet sans signe.
Ce tableau a pour dimensions width * height.

Cf.
http://www.griaulebiometrics.com/page/en-us/manual/fingerprint-sdk/programming-reference-guide/fingerprint-sdk-dll-reference-guide/grcap_image_event_proc
http://www.griaulebiometrics.com/page/en-us/manual/fingerprint-sdk/using-the-sdk/fingerprint-image-format

(voir également la limitation concernant la version gratuite : l'image
est cryptée)

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
yedaye
Salut Romain
Pour ce qui est du GrFinger, j'utilise la version 2007 qui n'encrypte
pas l'image. elle peut recevoir une image cryptée pour en extraire les
minuties mais elle n'envoie pas une image cryptée à la sortie du
capteur.

Pour le format d'image, je suis bien au courant mais mon problème
comme je l'ai dit dans le dernier post,
PROCEDURE ImageCallback(idsensor est une chaîne="DPMS6C2DB4",largeur
est un entier=0,hauteur est un entier=0, monimg est une
chaîne=0 ,resol est un entier=0)

la variable monimg doit être un tableau de 355 par 390 entiers sans
signe sur 1 octet mais je n'arrive pas à la déclarer dans la
procédure.

PROCEDURE ImageCallback(idsensor est une chaîne="DPMS6C2DB4",largeur
est un entier=0,hauteur est un entier=0, monimg est un tableau de 355
par 390 entiers sans signe sur 1 octet ,resol est un entier=0)

windev refuse d'accepter la déclaration de la variable, il met,
"tableau est un mot clé wlanguage"
J'ai essayé de la déclarer avant :

monimg est un tableau de 355 par 390 entiers sans signe sur 1 octet

PROCEDURE ImageCallback(idsensor est une chaîne="DPMS6C2DB4",largeur
est un entier=0,hauteur est un entier=0, monimg ,resol est un
entier=0)

il ne reconnait plus la procédure. il souligne PROCEDURE en rouge.

j'ai déclaré la variable comme une variable globale que j'ai fait
passer dans la procédure.
Refus toujours avec l'erreur suivante (la variable monimg tente de
masquer la variable globale monimg).

Comment puis-je passer un tableau en variable dans une procédure ou il
y a-t-il un autre moyen de récupérer l'image, un autre type de
variable par exemple?
Merci
Avatar
Romain PETIT
a formulé la demande :
la variable monimg doit être un tableau de 355 par 390 entiers sans
signe sur 1 octet mais je n'arrive pas à la déclarer dans la
procédure.



Non, ce n'est pas un tableau à 2 dimensions, c'est un tableau de
355*390 8450 entiers sans signe sur 1 octet.

Essaye avec la chaine et utilise Transfert :

PROCEDURE ImageCallback(idsensor est une chaîne="DPMS6C2DB4",largeur
est un entier=0,hauteur est un entier=0, monimg est une chaine, resol
est un entier=0)

eTaille est un entier = largeur * hauteur
MonTableau est un tableau de eTaille entier sans signe sur 1 octet

Transfert(&MonTableau, &MaChaine, eTaille)


A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
yedaye
Superbe, j'ai pu avoir des valeurs dans le tableau maintenant je dois
remplir mon champ image avec les valeurs en niveau de gris de chaque
pixel. je vais essayer de les convertir en valeur rvb. Quand j'envoie
directement, l'image n'apparait pas. Il donne deux couleurs, rouge et
blanc.
Merci beaucoup Romain, tu m'as été d'un grand secours, je vais
continuer à avancer et apprivoiser cet appareil.
Est-ce que tu connais une possibilité de remplir un champ image sans
avoir à parcourir chaque pixel?
Avatar
yedaye
J'ai fini par trouver une méthode pour envoyer la valeur vrai de la
couleur au champ image.
Couleur[i]=RVB(niveau de gris[i],niveau de gris[i],niveau de gris[i])

J'utilise la fonction dremplissage pour remplir mon champ image mais
j'ai l'impression qu'il cherche à colorer tous le champ image à chaque
pixel or ce que je veux c'est affecter à chaque point du champ une
valeur précise.

Avez-vous une idée?
Merci
Avatar
Romain PETIT
avait soumis l'idée :

J'utilise la fonction dremplissage pour remplir mon champ image mais
j'ai l'impression qu'il cherche à colorer tous le champ image à chaque
pixel or ce que je veux c'est affecter à chaque point du champ une
valeur précise.

Avez-vous une idée?



dPoint.

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
yedaye
Merci
Je l'ai essayé et ça dessine bien l'image de l'empreinte.
Je compte télécharger GDImage pour pouvoir agir directement sur
l'ensemble du champ image, parce que point par point ce sera trop
long.
Avatar
Romain PETIT
Le 17/06/2008, a supposé :
Merci
Je l'ai essayé et ça dessine bien l'image de l'empreinte.
Je compte télécharger GDImage pour pouvoir agir directement sur
l'ensemble du champ image, parce que point par point ce sera trop
long.



Sinon tu peux aussi directement enregistrer l'image au format BMP
(c'est relativement simple) et l'afficher ensuite dans ton champ.

http://www.commentcamarche.net/video/format-bmp.php3
http://www.fileformat.info/format/bmp/egff.htm

Encore plus simple : la fonction existe dans le SDK :
http://www.griaulebiometrics.com/page/en-us/manual/fingerprint-sdk/programming-reference-guide/fingerprint-sdk-dll-reference-guide/grcapsaverawimagetofile

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
1 2 3 4 5