Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

empreinte digital avec windev

426 views
Skip to first unread message

yed...@gmail.com

unread,
Jun 11, 2008, 10:57:27 AM6/11/08
to
Salut
Je développe une application de reconnaissance par empreinte digital
avec windev 10.
J'ai acheté le Microsoft fingerprint reader et j'ai le fingerprint
SDK de Griaule.

Mon problème est le suivant .

la fonction CapRawImageToHandle est définie dans le SDK avec les
paramètres 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îne
moncontext, monhdc, monhandle sont des entiers
monimage est un Variant
ActiveX1>>CapInitialize()
ActiveX1>>Initialize()
ActiveX1>>CreateContext(moncontext)
ActiveXEvénement("montest",ActiveX1,"SensorPlug")
ActiveX1>>CapStartCapture(idsensor)
monhdc=dDébutDessin(Image1)
monhandle=Handle(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éthode <CapRawImageToHandle>, l'objet
Automation/ActiveX a renvoyé l'erreur suivante : 'Erreur 80020005,
Type incorrect pour le paramètre 5' "

Quelqu'un a une idée?

Merci d'avance

Romain PETIT

unread,
Jun 11, 2008, 11:03:27 AM6/11/08
to
Dans son message précédent, yed...@gmail.com a écrit :
> Salut

Salut,

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

-> C'est un paramètre en sortie...(donc rien à voir avec le handle du
champ image...)
Essaye avec :
ActiveX1>>CapRawImageToHandle(monimage,355,390,monhdc,&monhandle)

Et ensuite tu devrais avoir une valeur pour le handle qui te serviras
probalement pour la suite...

A+

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


yed...@gmail.com

unread,
Jun 11, 2008, 11:29:31 AM6/11/08
to
Merci d'avoir répondu si promptement.
J'ai fais ce que tu as dit mais j'ai toujours la même erreur.

idsensor est une chaîne
moncontext, monhdc,monhandle sont des entiers


monimage est un Variant
ActiveX1>>CapInitialize()
ActiveX1>>Initialize()
ActiveX1>>CreateContext(moncontext)
ActiveXEvénement("montest",ActiveX1,"SensorPlug")
ActiveX1>>CapStartCapture(idsensor)
monhdc=dDébutDessin(Image1)

//monhandle=Handle(Image1)
ActiveX1>>CapRawImageToHandle(monimage,355,390,monhdc,&monhandle)
// Affichage de la valeur du handle
Info(monhandle)

j'utilise une version trial du fingerprint SDK de griaule de 90 jours
Je ne sais pas si elle a des limites, ils n'en n'ont pas parlé dans
les docs. les fonctions d'initialisations me renvoient bien le code de
succès mais le lecteur ne s'allume pas. Quand j'essaie avec les
applications exemples venues avec l'SDK, pas de problème. Est-ce moi
qui initialise mal, ou d'où peut venir le problème?

Merci

Romain PETIT

unread,
Jun 11, 2008, 11:44:36 AM6/11/08
to
yed...@gmail.com a formulé la demande :

> Est-ce moi
> qui initialise mal, ou d'où peut venir le problème?

http://www.griaulebiometrics.com/page/en-us/manual/fingerprint-sdk/programming-reference-guide/activex/caprawimagetohandle

En VB :
Function CapRawImageToHandle (ByRef RawImage As Object, ByVal width As
Integer, ByVal height As Integer, ByVal hdc As Integer, ByRef handler
As stdole.IPictureDisp) As Integer

Donc tu vois que "handler" est un type de données définie en amont...

yed...@gmail.com

unread,
Jun 11, 2008, 12:20:53 PM6/11/08
to
oui, j'avais vu sa et ce qui me dérange beaucoup c'est l'équivalence
vb <--> windev
le type IPictureDisp par exemple, je ne sais pas à quoi il correspond
en windev. j'ai l'impression que c'est un type OLE mais comment le
définir pour qu'il fonctionne avec mon champ image "image1" par
exemple.
j'ai essayé l'objet automation dynamique mais sans succès.
Merci beaucoup Romain pour l'attention que tu portes au sujet. J'avais
aussi quelques doutes sur le paramètre précédent (HDC) j'espère que je
l'ai bien défini ?

Pascal ROY

unread,
Jun 12, 2008, 2:15:09 AM6/12/08
to
yed...@gmail.com a écrit :
Bonjour,
Je ne connais pas du tout le "truc" mais
d'apres ce que tu nous donnes comme info,
je dirais que le Handle de sortie doit correspondre
à un handle valide. Par exemple celui d'un champ image.

--
Pascal ROY
(Service Informatique - SODALEC)

yed...@gmail.com

unread,
Jun 12, 2008, 4:25:10 AM6/12/08
to
Bonjour
Moi même c'est ce que je pensais c'est pour sa que j'ai mis ces deux
codes
monhandle=Handle(Image1)
//image1 étant le champ image
ActiveX1>>CapRawImageToHandle(monimage,355,390,monhdc,monhandle)

ou comme c'est un paramètre de sorti, je dois récupérer la valeur de
"monhandle" et l'affecter à un champ image?

Romain PETIT

unread,
Jun 12, 2008, 5:21:52 AM6/12/08
to
yed...@gmail.com a formulé la demande :

> le type IPictureDisp par exemple, je ne sais pas à quoi il correspond


> en windev. j'ai l'impression que c'est un type OLE mais comment le
> définir pour qu'il fonctionne avec mon champ image "image1" par
> exemple.

La définition du IPictureDisp est ici :

http://msdn.microsoft.com/en-us/library/ms680762(VS.85).aspx
Tu dois donc utiliser une structure correspondante.

> j'ai essayé l'objet automation dynamique mais sans succès.
> Merci beaucoup Romain pour l'attention que tu portes au sujet. J'avais
> aussi quelques doutes sur le paramètre précédent (HDC) j'espère que je
> l'ai bien défini ?

En théorie, oui...
Dans la pratique, je crois avoir eu des souci avec l'hDC récupéré par
la fonction dDébutDessin pour l'utiliser ensuite avec des API (mais
bon, je suis toutjours en 7.5...)
Sinon, il faudra utiliser l'API GetWindowDC (si tu utiliser l'Hdc de la
fenetre) ou GetDC si tu utilises le champ.
http://msdn.microsoft.com/en-us/library/ms534830(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms533241(VS.85).aspx

(dans l'exemple VB6, c'est le hDC de la fenetre qui est utilisé)
Bon courage.

yed...@gmail.com

unread,
Jun 13, 2008, 4:53:47 AM6/13/08
to
Merci Romain pour tes conseils, ils m'ont été d'un grand secours.
j'ai récupéré l'HDC avec l'API windows comme tu me l'a dit et sa
marche bien. Mon problème maintenant est la récupération de l'image.
Quand je lance le test, il me dit qu'une variable de type incorrecte a
été passé. je suis entrain de faire les modifications et j'espère que
j'aurai gain de cause. En VB, c'est un type RawImage, j'ai lu dans un
forum qu'il correspond à un tableau de (largeur d'image) par (hauteur
d'image) de entiers sans signe sur 1 octet. j'ai essayé mais toujours
la même chose.
Selon vous, rawimage peut être sous quel forme en windev ?

Merci

Romain PETIT

unread,
Jun 13, 2008, 5:10:21 AM6/13/08
to
yed...@gmail.com a écrit :

> Selon vous, rawimage peut être sous quel forme en windev ?

Tu devrais télécharger Visual Studio Express
http://www.microsoft.com/express/vb/default.aspx et charger le projet
exemple en C#...

En VB6, on trouve :
' Raw image data type.
Public Type rawImage
' Image data.
img As Variant
' Image width.
width As Long
' Image height.
height As Long
' Image resolution.
res As Long
End Type

yed...@gmail.com

unread,
Jun 13, 2008, 6:51:19 AM6/13/08
to
j'ai lancé le téléchargement mais si je dois recommencer tous mon
développement en VB, je serai en retard dans mes échéances. est-ce
qu'il y a possibilité de faire communiquer windev et un programme fait
en VB ? Comme cela, je pourrai faire la partie de communication avec
le lecteur en VB et les autres en windev.

Romain PETIT

unread,
Jun 13, 2008, 7:03:19 AM6/13/08
to
yed...@gmail.com a exposé le 13/06/2008 :

Non, il y a méprise, il ne s'agit pas pour toi de reprendre le
développement en VB ou C#, il s'agit de pouvoir ouvrir les exemples du
SDK (qui n'existent pas en W-langage) afin de pouvoir plus facilement
les retranscrire sous WD (types de données, comment utiliser les
fonctions etc...)

yed...@gmail.com

unread,
Jun 13, 2008, 7:31:03 AM6/13/08
to
ok, c'est compris j'ai déjà trouvé ce qui bloque réellement, c'est le
type de la variable raw.img qui est Variant en VB.
Sous windev, il n'accepte pas le variant. il met en retour pour
l'évènement ImageAcquired,

<< Un élément de type ne peut pas être converti vers le type
variant.>>

Si au moins il précisait le type de la variable d'origine, je saurai
quoi mettre comme type à ma variable Param_image.
voici ma fonction de callback

PROCEDURE Aquisition_Image(Param_ID_Sensor="DPMS6C2DB4",
Param_Largeur=355,Param_image est un Variant=0 ,
Param_Hauteur=390,Param_res=96)

et mon évènement

ActiveXEvénement("Aquisition_Image",ActiveX1,"ImageAcquired")


ensuite il apparaît un message de sécurité windev.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Une erreur système inattendue est survenue.
Si cet incident se produit de manière systématique lorsque vous
exécutez les mêmes manipulations, il est conseillé de transmettre au
Support Technique Gratuit :
- une description des circonstances de l'incident
- les lignes de code, une fenêtre ou un projet permettant de
reproduire le problème
- les informations techniques suivantes

Détails techniques :

Module : ntdll.dll
Adresse de base : 7C910000
Erreur système : Access violation (GPF)
EIP = 7C928FEA
OS : Windows XP ou .NET Service Pack 2(5.1.2600)


**********************************************

Informations techniques

Dump de l'erreur du module <WD100VM.DLL> <10.00Mo>.

- Niveau : erreur fatale (EL_FATAL)

- Code erreur : 1020

- Code erreur WD55 : 0

- Pas de code d'erreur système

- Pas de message d'erreur système

- Que s'est-il passé ?
Une erreur système inattendue est survenue.
Si cet incident se produit de manière systématique lorsque vous
exécutez les mêmes manipulations, il est conseillé de transmettre au
Support Technique Gratuit :
- une description des circonstances de l'incident
- les lignes de code, une fenêtre ou un projet permettant de
reproduire le problème
- les informations techniques suivantes

Détails techniques :

Module : ntdll.dll
Adresse de base : 7C910000
Erreur système : Access violation (GPF)
EIP = 7C928FEA
OS : Windows XP ou .NET Service Pack 2(5.1.2600)

- Infos de debug :
Registres :

EIP = 7C928FEA EBP = 0012F9F4
EAX = 00000000 EBX = 00000000
ECX = 0000023C EDX = 01063244
ESI = 01063234 EDI = 00000000

Pile des appels :

[ntdll.dll (7C910000)] 7C928F8F : RtlpWaitForCriticalSection() + 91
bytes


- Pas d'info attachée

- Identifiant dans le .err : 1020
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Peut être que vous y verrez plus clair que moi.

Merci

Moua

unread,
Jun 13, 2008, 7:40:12 AM6/13/08
to
yed...@gmail.com avait soumis l'idée :

> ok, c'est compris j'ai déjà trouvé ce qui bloque réellement, c'est le
> type de la variable raw.img qui est Variant en VB.
> Sous windev, il n'accepte pas le variant. il met en retour pour
> l'évènement ImageAcquired,
>
> << Un élément de type ne peut pas être converti vers le type
> variant.>>
>
> Si au moins il précisait le type de la variable d'origine, je saurai
> quoi mettre comme type à ma variable Param_image.
> voici ma fonction de callback
>
Cette déclaration :

vMaVariable est un variant

est-elle la solution ?


Romain PETIT

unread,
Jun 13, 2008, 7:48:39 AM6/13/08
to
yed...@gmail.com a exposé le 13/06/2008 :
> PROCEDURE Aquisition_Image(Param_ID_Sensor="DPMS6C2DB4",
> Param_Largeur=355,Param_image est un Variant=0 ,
> Param_Hauteur=390,Param_res=96)

Il n'y aurait pas un paramètre de trop ?

' An image was acquired from reader
Private Sub GrFingerXCtrl1_ImageAcquired(ByVal idSensor As String,
ByVal width As Long, ByVal height As Long, rawImage As Variant, ByVal
res As Long)

Romain PETIT

unread,
Jun 13, 2008, 7:49:47 AM6/13/08
to
Il se trouve que Romain PETIT a formulé :

> yed...@gmail.com a exposé le 13/06/2008 :
>> PROCEDURE Aquisition_Image(Param_ID_Sensor="DPMS6C2DB4",
>> Param_Largeur=355,Param_image est un Variant=0 ,
>> Param_Hauteur=390,Param_res=96)
>
> Il n'y aurait pas un paramètre de trop ?

ou plutot une inversion entre hauteur et rawimage ?

yed...@gmail.com

unread,
Jun 13, 2008, 7:57:28 AM6/13/08
to
oui, c'est vrai, c'est une erreur au cours du post.
la fonction est bien écrite comme ceci :
Aquisition_Image(Param_ID_Sensor="DPMS6C2DB4", Param_Largeur=355,
Param_Hauteur=390,Param_image est un Variant=0 ,Param_res=96)
J'avais lu dans un forum, quelqu'un qui a eu le même problème, vous
pouvez y jeter un coup d'œil à cette adresse:

<a href="http://www.wdforge.org/modules/newbb/viewtopic.php?
post_id=20660">http://www.wdforge.org/modules/newbb/viewtopic.php?
post_id=20660</a>

J'ai essayé la solution dont il a parlé (choisir de passer par les dll
et non l'activeX) mais, l'appel d'une fonction dans la dll me renvoie
toujours que la fonction n'a pas été trouvé hors j'ai bien suivi la
syntaxe écrite dans la documentation de l'SDK, bref, peut être que les
messages du forum vous aideront à me guider sur mon problème de type
de variable.
Merci

Romain PETIT

unread,
Jun 13, 2008, 8:09:34 AM6/13/08
to
yed...@gmail.com vient de nous annoncer :

> J'ai essayé la solution dont il a parlé (choisir de passer par les dll
> et non l'activeX) mais, l'appel d'une fonction dans la dll me renvoie
> toujours que la fonction n'a pas été trouvé hors j'ai bien suivi la
> syntaxe écrite dans la documentation de l'SDK, bref, peut être que les
> messages du forum vous aideront à me guider sur mon problème de type
> de variable.

La solution avec l'ActiveX semble difficile...
Tu as pris contact avec la personne qui semble avoir réussi à utiliser
la DLL ?

A+

Moua

unread,
Jun 13, 2008, 9:28:19 AM6/13/08
to
Moua a pensé très fort :

J'ai répondu sans lire avec attention,

PROCEDURE Aquisition_Image(Param_ID_Sensor="DPMS6C2DB4",
Param_Largeur=355,Param_image est un Variant=0 ,
Param_Hauteur=390,Param_res=96)

A la place de "Param_image est un Variant=0", mettre "Param_image est
un Variant=null" ?


yed...@gmail.com

unread,
Jun 13, 2008, 10:13:56 AM6/13/08
to
Merci pour vos réponses.
Pour ce qui est du contact avec celui qui a utilisé les dll , je lui
est envoyé un mail mais je suis sans réponse.

Pour le variant=null, toujours la même réponse

<< Un élément de type ne peut pas être converti vers le type
> variant.>>

Est-ce qu'il y a une possibilité de lire le contenu d'une dll, peut
être que c'est moi qui ne tapais pas correctement la fonction ou que
l'aide fournit avec l'SDK est erronée.

Romain PETIT

unread,
Jun 13, 2008, 10:32:08 AM6/13/08
to
yed...@gmail.com a émis l'idée suivante :

> Est-ce qu'il y a une possibilité de lire le contenu d'une dll, peut
> être que c'est moi qui ne tapais pas correctement la fonction ou que
> l'aide fournit avec l'SDK est erronée.

http://www.nirsoft.net/utils/dll_export_viewer.html

yed...@gmail.com

unread,
Jun 13, 2008, 11:44:28 AM6/13/08
to
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
_GrInitialize@0 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 Files\Griaule\Fingerprint SDK 2007\bin
\GrFinger.dll")
mavar2=AppelDLL32("GrFinger","_GrInitialize@0")

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.

yed...@gmail.com

unread,
Jun 16, 2008, 10:08:12 AM6/16/08
to
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?

Romain PETIT

unread,
Jun 16, 2008, 10:21:43 AM6/16/08
to
yed...@gmail.com 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)

yed...@gmail.com

unread,
Jun 16, 2008, 10:53:10 AM6/16/08
to
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

Romain PETIT

unread,
Jun 16, 2008, 11:13:06 AM6/16/08
to
yed...@gmail.com 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 =138450 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)

yed...@gmail.com

unread,
Jun 16, 2008, 1:05:49 PM6/16/08
to
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?

yed...@gmail.com

unread,
Jun 17, 2008, 4:46:37 AM6/17/08
to
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

Romain PETIT

unread,
Jun 17, 2008, 5:20:18 AM6/17/08
to
yed...@gmail.com 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.

yed...@gmail.com

unread,
Jun 17, 2008, 5:35:41 AM6/17/08
to
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.

Romain PETIT

unread,
Jun 17, 2008, 6:31:19 AM6/17/08
to
Le 17/06/2008, yed...@gmail.com a supposé :

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

yed...@gmail.com

unread,
Jun 17, 2008, 7:52:06 AM6/17/08
to
Je viens de le faire c'est cool, ça marche correctement. L'image est
bien enregistrée et je la récupère facilement dans mon champ image.
Merci beaucoup
J'avais laissé cette étape et continué à travailler sur l'extraction
des minuties avec la fonction _GrExtract@28.
le type de la variable template.tpt me joue un peu des tours.
template est une classe avec tpt un tableau d'entier sans signe et
size la taille de la mémoire allouée.

moi je n'ai pas utilisé une classe, ne maitrisant pas trop la POO.

J'ai déclaré montemplate comme un tableau de 10000 entiers sans signe
sur 1 octet, comme une chaîne, comme un buffer. il me met une erreur :
type incompatible pour le paramètre 7.

mavar=AppelDLL32("GrFinger","_GrExtract@28",monim:sources,monim:largeur,monim:hauteur,monim:resolution,montemplate2,GR_MAX_SIZE_TEMPLATE,GR_DEFAULT_CONTEXT)

le paramètre 7 est "montemplate2"

j'ai essayé de passer par le transfert, ça marche mais la fonction au
lieu de me retourner la qualité du template, j'ai plutôt un code
d'erreur (-113 = erreur de type général), peu être que je l'ai mal
utilisé, voila ma syntaxe

montemplate2 est une chaîne
mavar=AppelDLL32("GrFinger","_GrExtract@28",monim:sources,monim:largeur,monim:hauteur,monim:resolution,montemplate2,GR_MAX_SIZE_TEMPLATE,GR_DEFAULT_CONTEXT)
Transfert(&montemplate, &montemplate2, GR_MAX_SIZE_TEMPLATE)

Merci

yed...@gmail.com

unread,
Jun 17, 2008, 8:07:18 AM6/17/08
to
Je viens de vérifier, le tableau du template ne change pas d'une
empreinte à l'autre donc il y a vraiment quelques choses qui ne se
passe pas bien.

Romain PETIT

unread,
Jun 17, 2008, 8:08:45 AM6/17/08
to
yed...@gmail.com avait soumis l'idée :

> le type de la variable template.tpt me joue un peu des tours.


> template est une classe avec tpt un tableau d'entier sans signe et
> size la taille de la mémoire allouée.
>
> moi je n'ai pas utilisé une classe, ne maitrisant pas trop la POO.

non non non, rien à voir avec la POO...
Il s'agit d'un pointeur.

Il faut bien passer un tableau de 10000 (GR_MAX_SIZE_TEMPLATE) entiers
sans signe sur 1 octet mais le paramètre à passer n'est pas le tableau
mais l'*adresse* du tableau.

eRetDLL est un entier
montemplate est un tableau de GR_MAX_SIZE_TEMPLATE entier sans signe
sur 1 octet // 10000

eRetDLL = AppelDLL32("GrFinger","_GrExtract@28", monim:sources,
monim:largeur, monim:hauteur, monim:resolution, &montemplate,
dimension(montemplate),GR_DEFAULT_CONTEXT)

SI eRetDLL<0 ALORS
Erreur("Erreur N°" + eRetDLL)
SINON
Info("Ok")
FIN

yed...@gmail.com

unread,
Jun 17, 2008, 8:57:03 AM6/17/08
to
je l'ai fait, la variable retournée (montemplate) est vide (o o o o o
o ......).
et eRetDLL= -113 (erreur de type général).

yed...@gmail.com

unread,
Jun 18, 2008, 12:04:11 PM6/18/08
to
Me voici de retour avec le point de la situation.
J'ai voulu être plus malin en allant chercher dans la base de données,
les templates enregistrés par le software de griaule.
Ils sont enregistrés dans un champ binaire dans une base access .
voici le code de récupération des templates et de leur ID
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
templateref est une structure
template est un tableau dynamique
templ_id est un tableau de 150 entiers
FIN
mesreftempl est templateref
mesreftempl:template = allouer un tableau dynamique de 1 chaînes
ASCIIZ sur 10000
montab est un tableau de 1 chaînes ASCIIZ sur 10000
HLitPremier(enroll,ID)
//info(TypeVar(enroll.template)) (ici j'avais eu comme type 29)
TableauAjoute(mesreftempl:template , enroll.template)
TableauAjoute(montab , enroll.template)
TableauAjoute(mesreftempl:templ_id , enroll.ID)
TANTQUE PAS HEnDehors
HLitSuivant(enroll , ID)
TableauAjoute(mesreftempl:template , enroll.template)
TableauAjoute(montab , enroll.template)
TableauAjoute(mesreftempl:templ_id , enroll.ID)
FIN
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
Le type de variable tableau de 1 chaînes ASCIIZ sur 10000 a bien
récupéré les templates mais quand j'utilise le même type pour
l'extraction du template, j'ai toujours l'erreur -113.

Bon, je me suis dis, je prend les templates venus de la base de
données et je m'en sert pour implémenter les autres fonctions
(vérification, identification......)

Je me suis attaqué à la vérification et j'ai créé une procédure que
j'appelle verifie().
voici son code
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PROCEDURE verifie()
montempl, montemplref sont des tableaux de 1 chaînes ASCIIZ sur 10000
TableauAjoute(montempl , montab[3])
i est un entier
score est un entier=0
mavar est un entier
letempl est une chaîne ASCIIZ sur 10000
letempl=montab[3]
mavar=AppelDLL32("GrFinger","_GrIdentifyPrepare@8",&letempl,GR_DEFAULT_CONTEXT)
Info("la préparation a donné : "+mavar)

POUR i=2 A 5
TableauAjoute(montemplref,mesreftempl:template[i])

mavar=AppelDLL32("Grfinger","_GrIdentify@12",montemplref[2],score,GR_DEFAULT_CONTEXT)
SI mavar=GR_MATCH ALORS
Info("vous avez été identifié avec le numéro : "+i)
RETOUR
SINON
Info("erreur de vérification")
FIN
FIN
Info("c'est la fin")
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Déjà au niveau de _GrIdentifyPrepare@8, il me retourne comme valeur -5
== ( A null parameter was supplied ), ce qui m'étonne quand je fais le
débogage, letempl contient bien le template N°3 de la base et
GR_DEFAULT_CONTEXT=0 comme d'habitude. j'ai changé le context,
toujours la même chose.

Je suis passé par un transfert en récupérant le template dans une
chaîne et en le passant dans un tableau dynamique, toujours rien.

Avez-vous une idée?

Daniel

unread,
Jun 19, 2008, 10:33:28 AM6/19/08
to
Bonsoir

je lisais avec attention ce thread.

Simplement pour info, il faut savoir que l'utilisation d'une empreinte
digital est très réglementée en France.

Il apparaît également que l'empreinte digitale est peu fiable, et qu'il
est préférable d'utiliser l'empreinte palmaire.

De plus le stockage de l'empreinte est interdit sauf dérogation.

--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)

Romain PETIT

unread,
Jun 19, 2008, 10:40:52 AM6/19/08
to
Il se trouve que Daniel a formulé :
> Bonsoir

Salut,

> je lisais avec attention ce thread.
> Simplement pour info, il faut savoir que l'utilisation d'une empreinte
> digital est très réglementée en France.
> Il apparaît également que l'empreinte digitale est peu fiable, et qu'il est
> préférable d'utiliser l'empreinte palmaire.
> De plus le stockage de l'empreinte est interdit sauf dérogation.

Faut voir ce que dit la loi de la République du Bénin...

A+

yed...@gmail.com

unread,
Jun 19, 2008, 1:11:49 PM6/19/08
to
Je vais vérifier.

Mais comme c'est un projet universitaire, je crois que les
dispositions doivent être prise.

Je termine une formation d'ingénieur en traitement de signal et c'est
mon projet de fin d'étude. Si vous avez une idée sur l'erreur que mon
programme retourne, cela m'aiderait à avancer et à mieux comprendre le
fonctionnement de windev.
J'ai quand même entré tous les paramètres mais il me dit: A NULL
parameter was supplied.

A NULL selon moi signifie que le paramètre est là mais avec une valeur
nulle alors que quand je fais le débogage, les deux paramètres envoyés
contiennent tous leur valeur.

HELP

marcel...@gmail.com

unread,
Jun 24, 2008, 3:39:23 AM6/24/08
to
On 11 juin, 17:29, yed...@gmail.com wrote:
> Merci d'avoir répondu si promptement.
> J'ai fais ce que tu as dit mais j'ai toujours la même erreur.
>
> idsensor est une chaîne
> moncontext, monhdc,monhandle sont des entiers
> monimage est un Variant
> ActiveX1>>CapInitialize()
> ActiveX1>>Initialize()
> ActiveX1>>CreateContext(moncontext)
> ActiveXEvénement("montest",ActiveX1,"SensorPlug")
> ActiveX1>>CapStartCapture(idsensor)
> monhdc=dDébutDessin(Image1)
> //monhandle=Handle(Image1)
> ActiveX1>>CapRawImageToHandle(monimage,355,390,monhdc,&monhandle)
> // Affichage de la valeur du handle
> Info(monhandle)
>
> j'utilise une version trial du fingerprint SDK de griaule de 90 jours
> Je ne sais pas si elle a des limites, ils n'en n'ont pas parlé dans
> les docs. les fonctions d'initialisations me renvoient bien le code de
> succès mais le lecteur ne s'allume pas. Quand j'essaie avec les
> applications exemples venues avec l'SDK, pas de problème. Est-ce moi
> qui initialise mal, ou d'où peut venir le problème?
>
> Merci

Bonjour j'ai le même problème, lorsque j'installe le sdk, le lecteur
d'empreinte ne s'allume plus. Est ce que quelqu'un pourrait
m'expliquer que faire pour que celui ci fonctionne de nouveau.
Merci par avance

yed...@gmail.com

unread,
Jun 24, 2008, 6:56:26 AM6/24/08
to
Bonjour
Explique moi un peu. Quel SDk tu utilise, avec quel lecteur et est-ce
que les applications exemples qui sont sur l'SDK font fonctionner
correctement l'appareil?

A+

marcel...@gmail.com

unread,
Jun 24, 2008, 7:18:03 AM6/24/08
to

J'utilise FingerPrint SDK 2007 avec le FingerPrintReader de Microsoft
Et les applications qui sont sur le SDK ne fonctionnent pas
correctement
A vrai dire des que j'installe FingerCap USB Driver suite à
l'installation du SDK le lecteur s'eteind.
Et lorsque j'essaye de le faire fonctionner sans celui ci le programme
que je suis en train d'effectuer ne prend pas en compte le lecteur.

yed...@gmail.com

unread,
Jun 24, 2008, 10:35:45 AM6/24/08
to
Vérifie si tu a bien supprimé le driver venu avec le microsoft
fingerprint reader. Le lecteur ne doit utiliser que le pilote
fingercap driver de griaule. Donc, désinstalle tous les autres sdk ou
pilote que tu avais installé (SDK de reconnaissance par empreinte
digitale) ainsi que celui du fingerprint SDK 2007 et refais
l'installation du fingerprint SDK 2007 uniquement, enfin, vérifie bien
que le lecteur utilise le pilote de ton sdk (fingercap driver usb).

A+

marcel...@gmail.com

unread,
Jun 24, 2008, 11:40:55 AM6/24/08
to
J'ai effectué toutes les manipulations que tu m'a demandé de faire.
Le résultat est le suivant en réinstallant le programme rien ne se
passe.
Mais si j'installe fingercap USB driver 1.2. Il reconnait mon
matériel, et l'installe lorsque je le connecte en montrant l'icone de
fingercap.
Mais la lumière ne s'allume pas.
Quand a l'exécution des samples le message suivant s'affiche:
"**GrFingerX Initialized Succefull**"
"Sensor: File.Event: Plugged. "

yed...@gmail.com

unread,
Jun 24, 2008, 11:58:27 AM6/24/08
to
J'ai l'impression que c'est un problème matériel parce que si la
library s'initialise correctement avec les deux messages qui sont
affichés

**GrFingerX Initialized Successfull**
Sensor: File. Event: Plugged.

la suite doit être
Sensor: DPMS6C2DB4. Event: Plugged.
avec DPMS6C2DB4, l'identifiant du lecteur dans mon cas.

Il va falloir changer ton appareil, j'espère que tu es dans la période
de garantie ou vérifie que ton poste respecte la configuration
minimale exigée dans la doc de l'SDK. Et essai avec une application
DLL et non ActiveX pour voir (Fingerprint SDK Delphi 6-7 et non
Fingerprint SDK ActiveX Delphi 6-7).

marcel...@gmail.com

unread,
Jun 24, 2008, 12:05:55 PM6/24/08
to
Je te remercie
Mon matériel est encore en garantie :)
Je te recontacterais par le biais de ce forum losqu'il sera remplacé
si le problème persiste.
A+

marcel...@gmail.com

unread,
Jul 10, 2008, 3:30:18 AM7/10/08
to
Salut me revoici de nouveau.
J'ai fait fonctionner la garanti et j'ai reçu mon nouveau matériel
aujourd'hui.
Mais j'ai toujours le même problème .
Lorsque j'installe les drivers du lecteur, mon matériel est reconnu
alors que la lampe ne s'allume pas.
Par contre avec l'application digitalpersonna(fourni avec le matériel)
tout fonctionne convenablement.

marcel...@gmail.com

unread,
Jul 10, 2008, 11:27:46 AM7/10/08
to
Quelques informations complémentaire:
-La première
Les applications dll ne veulent pas s'exécuter, le message suivant
s'affiche:"This license is not valid. See manual for troubleshooting."
-La seconde
J'ai installer Grfinger JAVA SDK, lui affiche lorsque j'execute
GrFinger Java:
"Libraries loaded.
GrFinger installed
Sensor:File.Event: Plugged.
**GrFinger Initialized Successfull"
Merci par avance

marcel...@gmail.com

unread,
Jul 11, 2008, 4:46:37 AM7/11/08
to
C'est bon j'ai trouvé la solution à mon problème.
Il suffisait tout simplement de télécharger la dernière version de
GRFinger sur le site de Griaule.
Maintenant je n'ai plus qu'à attaquer le développement qui je l'espère
se fera sans trop de difficulté.

patrick-philippe

unread,
Sep 25, 2008, 12:25:06 PM9/25/08
to
yedaye a écrit le 11/06/2008 à 16h57 :
> 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
Salut,
j'ai suivi vos questions et reponses au sujet de la reconnaissance par
empreinte digitale.

J'ai moi aussi l'intention de mettre en oeuvre cette reconaissance biometrique;
toutefois je ne me sens pas capable de developper l'ensemble des processus
(fenêtres et procedures) .

Pourriez-vous me fournir les éléments nécessaires (fenêtres, codes sources,
dll, etc ) pour intégrer cette fonctionalité dans un projet existant ?


Si oui, alors je vous serai très reconaissant.


Patrick

soft...@hotmail.com


Merci d'avance...

christian-dercq

unread,
Oct 17, 2011, 6:49:50 AM10/17/11
to
Bonjour Marcel
Je suis intéressé par cette solution.
Je suis disposé à acheter le code windev que vous avez développé.
pouvez-vous me contacter sur cde...@igc.be
0 new messages