Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Travaux pratiques: extraction de photo d'identité | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Travaux pratiques: extraction de photo d'identité Ven 7 Déc 2007 - 17:29 | |
| Voici un petit essai d'extraction d'une photo d'identité d'une image. Très perfectible, évidemment, mais j'ai été très limité par le peu de variables disponibles, obligé d'en réutiliser certaines ce qui n'aide pas à la compréhension. Et il faudrait rajouter quelques tests de sécurité. - La photo est délimitée par un cadre à déplacer sur l'image, je redessine le tout à chaque modification du cadre, peut-être serait-il possible de n'effacer et redessiner que le cadre, et non l'image sous-jacente (SPRITE ?). - Les boutons ne sont pas très jolis, mais je n'ai pas su y mettre autre chose que du texte (y dessiner des flèches par exemple). - La fonction EXECUTE appelle IrfanView pour les fonctions concernant l'image. Cet appel est passant, et il faut introduire une attente (WAIT) pour que le travail se fasse, ce serait plus rationnel de tester la présence du fichier résultat. Voir l'aide de Irfanview pour les fonctions en ligne de commande. REMARQUE 1: Z: est un volume virtuel de manoeuvre de 64M réservé à chaque lancement dans la mémoire vive (c'est paramétrable, et sur 1 ou 2G de mémoire c'est transparent), ça évite de solliciter le disque dur pour les fichiers temporaires (mais tout est perdu à l'extinction). Faire une recherche Google sur Ramdisk ou Ramdrive pour ceux que ça intéresse. On peut le remplacer par C:\TEMP, par exemple. REMARQUE 2: Les photos d'identité, format 35x45 mm, doivent répondre à des normes très strictes. Voir: http://www.interieur.gouv.fr/sections/a_votre_service/vos_demarches/cni-passeport/passeport-electronique/downloadFile/attachedFile_2/Plaquette_Photos_d_identite_Nouvelle_version.pdf?nocache=1154360236.92Il faudra ensuite imprimer l'image résultat (qui est aux bonnes proportions) à la bonne dimension (35x45), sur papier et imprimante adéquats, ceci est une autre histoire. - Code:
-
REM ** IDENTITE.BAS extraction d'une photo d'identité d'une image quelconque ** REM ------------ REM * DEFINITION DES VARIABLES * DIM iview$, f1$, fr1$, fr2$, finfo$ DIM i%, a$, w%, h% DIM lc%, hc%, xc%, yc%, incr% DIM ww%, hh% DIM r%, xce%, yce% DIM xde%, yde%, lde%, hde% DIM xb%, yb%, lb%, hb%: REM boutons DIM rap, ang DIM xs%, ys% iview$ = "C:\Progra~1\Irfanv~1\i_view32.exe " finfo$ = "Z:\INFO.TXT" fr1$ = "Z:\IMAGE.BMP" fr2$ = "Z:\IDENTITE.BMP": REM image résultat incr% = 10 REM * OBJETS * REM 1 PICTURE d'affichage de l'image principale REM 2 REM 3 REM 4 REM 5 REM 6 REM 7 REM 8 REM 9 REM 10 REM 11 REM 12 PICTURE d'affichage de l'image résultat REM 20 REM * DEFINITION DES LABELS * LABEL Gauche, Haut, Bas, Droite, Pgrand, Ppetit, Pix1, Pix10, Fin, Bsou, Reaff
CAPTION 0, "Extraction d'une photo d'identité" FULL_SPACE 0
REM ***** Choix de l'image d'origine OPEN_DIALOG 20: REM création de l'objet système open_dialog numéro 20 f1$ = FILE_NAME$(20): REM f1$= nom absolu du fichier choisi
REM ***** Infos de l'image d'origine (dimensions) IF FILE_EXISTS(finfo$) = 1 THEN FILE_DELETE finfo$ EXECUTE iview$ + f1$ + " /info=" + finfo$: REM infos sur l'image d'origine WAIT 500 REPEAT: UNTIL FILE_EXISTS(finfo$) = 1 FILE_OPEN_READ 5, finfo$ FOR i% = 1 TO 6: FILE_READLN 5, a$: NEXT i% FILE_CLOSE 5 FILE_DELETE finfo$
REM dimensions de l'image d'origine -> ww% x hh% w% = 0: h% = 0 FOR i% = 20 TO LEN(a$) IF w% = 0 AND MID$(a$, i%, 1) = " " THEN w% = i% NEXT i% ww% = VAL(MID$(a$, 20, w%-20)) FOR i% = w%+3 TO LEN(a$) IF h% = 0 AND MID$(a$, i%, 1) = " " THEN h% = i% NEXT i% hh% = VAL(MID$(a$, w%+3, h%-w%-3))
REM ***** Conversion et redimensionnement (900x675) de l'image jpeg d'origine en bitmap REM le paramètre /aspectratio permet de ne donner qu'une des deux dimensions, REM la proportion sera respectée. IF FILE_EXISTS(fr1$) = 1 THEN FILE_DELETE fr1$ IF ww% >= hh% THEN EXECUTE iview$+f1$+" /resize=(900,0) /aspectratio /convert="+fr1$: rap = ww%/900 IF ww% < hh% THEN EXECUTE iview$+f1$+" /resize=(0,675) /aspectratio /convert="+fr1$: rap = hh%/675 WAIT 500 REPEAT: UNTIL FILE_EXISTS(fr1$) = 1
REM ***** Lecture des dimensions de l'image bitmap copie de l'image d'origine FILE_OPEN_READ 5, fr1$ FILE_READLN 5, a$ FILE_CLOSE 5 w% = ASC(MID$(a$, 19, 1)) + 256*ASC(MID$(a$, 20, 1)) h% = ASC(MID$(a$, 23, 1)) + 256*ASC(MID$(a$, 24, 1)) lc% = w%/4: REM largeur de départ du cadre de découpe hc% = INT(lc%*9/7): REM rapport 45/35 xc% = INT((w%-lc%)/2): REM emplacement sur l'image yc% = INT((h%-hc%)/2)
PICTURE 12: REM Objet pour la visualisation de l'image résultat
REM ***** Définition des boutons REM définition des boutons REM Boutons Gauche, Haut, Bas, Droite pour déplacer le cadre sur l'image REM Boutons > et < pour agrandir ou réduire le cadre REM Bouton Pix15 pour définir le facteur de déplacement: 1 ou 10 pixels, en bascule xb% = 2: yb% = h%+10 lb% = 45 BUTTON 2 TOP 2, yb% LEFT 2, xb% WIDTH 2, lb% CAPTION 2, "Gauche" ON_CLICK 2, Gauche xb% = xb% + lb% + 5 BUTTON 3 TOP 3, yb% LEFT 3, xb% WIDTH 3, lb% CAPTION 3, "Haut" ON_CLICK 3, Haut xb% = xb% + lb% + 5 BUTTON 4 TOP 4, yb% LEFT 4, xb% WIDTH 4, lb% CAPTION 4, "Bas" ON_CLICK 4, Bas xb% = xb% + lb% + 5 BUTTON 5 TOP 5, yb% LEFT 5, xb% WIDTH 5, lb% CAPTION 5, "Droite" ON_CLICK 5, Droite xb% = xb% + lb% + 5 BUTTON 6 TOP 6, yb% LEFT 6, xb% WIDTH 6, lb% CAPTION 6, ">" ON_CLICK 6, Pgrand xb% = xb% + lb% + 5 BUTTON 7 TOP 7, yb% LEFT 7, xb% WIDTH 7, lb% CAPTION 7, "<" ON_CLICK 7, Ppetit xb% = xb% + lb% + 5 BUTTON 8 TOP 8, yb% LEFT 8, xb% WIDTH 8, lb% CAPTION 8, "1 pix." ON_CLICK 8, Pix1 xb% = xb% + lb% + 5 BUTTON 9 TOP 9, yb% LEFT 9, xb% WIDTH 9, lb% CAPTION 9, "10 pix." ON_CLICK 9, Pix10 xb% = xb% + lb% + 5 BUTTON 10 lb% = 75 TOP 10, yb% LEFT 10, xb% WIDTH 10, lb% CAPTION 10, "OK" ON_CLICK 10, Fin
REM affichage de l'image principale PICTURE 1 WIDTH 1, w%+50 HEIGHT 1, h%+50 TOP 1, 5 MEMO 13 TOP 13,5 LEFT 13,w%+10 WIDTH 13,300 HEIGHT 13,200 PRINT_TARGET_IS 13 FONT_SIZE 13,10 FONT_BOLD 13 PRINT "Image d'origine:" PRINT "---------------------" PRINT " "+f1$ PRINT " "+STR$(ww%)+"x"+str$(hh%) PRINT "" PRINT "Image résultat:" PRINT "-------------------" PRINT " "+fr2$
Reaff: FILE_LOAD 1, fr1$: REM affichage de la copie BMP réduite de l'image principale
REM dessin du cadre d'identité 2D_TARGET_IS 1 2D_PEN_COLOR 255, 0, 0: REM rouge clair 2D_PEN_WIDTH 2 2D_POLY_FROM xc%, yc% 2D_POLY_TO xc%+lc%-1, yc% 2D_POLY_TO xc%+lc%-1, yc%+hc%-1 2D_POLY_TO xc%, yc%+hc%-1 2D_POLY_TO xc%, yc% REM limites du visage (haut du front, base du menton) 2D_PEN_COLOR 0, 255, 255: REM cyan clair 2D_LINE xc%, yc%+INT(4*lc%/35), xc%+lc%-1, yc%+INT(4*lc%/35) 2D_LINE xc%, yc%+INT(38*lc%/35), xc%+lc%-1, yc%+INT(38*lc%/35) REM limites de la position des yeux 2D_PEN_COLOR 255, 255, 0: REM jaune 2D_LINE xc%, yc%+INT(13*lc%/35), xc%+lc%-1, yc%+INT(13*lc%/35) 2D_LINE xc%, yc%+INT(23*lc%/35), xc%+lc%-1, yc%+INT(23*lc%/35) REM dessin de l'ovale du visage 2D_PEN_COLOR 0, 255, 255: REM cyan clair r% = INT(17*lc%/35) xce% = xc% + r% yce% = yc% + INT(21*lc%/35) 2D_POLY_FROM xce%, yce% + r% FOR ang = 0 TO 8*ATN(1) STEP 0.1 2D_POLY_TO xce% + INT(.75*r%*SIN(ang)), yce% + INT(r%*COS(ang)) NEXT ang
Bsou: REPEAT: UNTIL MOUSE_LEFT_DOWN(1) = 1 REPEAT: UNTIL MOUSE_LEFT_UP(1) = 1 xs% = MOUSE_X_LEFT_UP(1) ys% = MOUSE_Y_LEFT_UP(1) IF xs% > w% OR ys% > h% THEN GOTO Bsou: REM clic en dehors des limites GOTO Bsou
Gauche: xc% = xc% - incr%: IF xc% < 0 THEN xc% = 0 GOTO Reaff Haut: yc% = yc% - incr%: IF yc% < 0 THEN yc% = 0 GOTO Reaff Bas: yc% = yc% + incr%: IF (yc% + hc%) > 675 THEN yc% = 675 - hc% GOTO Reaff Droite: xc% = xc% + incr%: IF (xc% + lc%) > 900 THEN xc% = 900 - lc% GOTO Reaff Pgrand: lc% = lc% + incr% hc% = INT(lc%*9/7) GOTO Reaff Ppetit: lc% = lc% - incr% hc% = INT(lc%*9/7) GOTO Reaff Pix1: incr% = 1: REM incrément 1 pixel GOTO Bsou Pix10: incr% = 10: REM incrément 10 pixels GOTO Bsou
Fin: REM Il vaudrait mieux découper dans l'image d'origine, REM mais il faut convertir les mesures xc%, yc%, lc%, hc% REM (il faut les multiplier par ww%/900: image origine horizontale, ou par hh%/675: REM image d'origine verticale) REM IF FILE_EXISTS(fr2$) THEN FILE_DELETE fr2$ REM a$=" /crop=("+str$(xc%)+","+str$(yc%)+","+str$(lc%)+","+str$(hc%)+")" REM EXECUTE iview$+fr1$+a$+" /convert="+fr2$: REM découpage dans l'image bitmap xde% = xc%*rap: yde% = yc%*rap: REM coordonnées et dimensions de la découpe lde% = lc%*rap: hde% = hc%*rap: REM dans le fichier d'origine a$=" /crop=("+str$(xde%)+","+str$(yde%)+","+str$(lde%)+","+str$(hde%)+")" EXECUTE iview$+f1$+a$+" /convert="+fr2$: REM découpage dans l'image d'origine REPEAT: UNTIL FILE_EXISTS(fr2$) = 1 WAIT 500: REM attente arbitraire d'exécution (passante)
REM ***** Affichage de l'image résultat en bas à droite de l'image affichée WIDTH 12, lde% HEIGHT 12, hde% TOP 12, h%+5-hde% LEFT 12, w%+10 FILE_LOAD 12, fr2$ PRINT " Découpe effectuée:" PRINT " x="+str$(xde%)+" y="+str$(yde%)+" l="+str$(lde%)+" h="+str$(hde%)
END
Dernière édition par le Lun 10 Déc 2007 - 22:53, édité 2 fois | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Ven 7 Déc 2007 - 18:45 | |
| Bravo pour votre code! - Citation :
- Le chemin de l'image de départ (f1$) est indiqué "en dur", il faudrait le choisir par une fonction "parcourir..."
Une fonction parcourir s'obtient facilement par l'objet OPEN_DIALOG qui visualise une fenêtre permettant de choisir un fichier dans l'arborescence des volumes. Cet objet est activé (c'est à dire que la fenêtre de choix de fichier est visualisée et le programme suspendu) par la fonction FILE_NAME$(N) N étant le numéro de cet OPEN_DIALOG. La fonction FILE_NAME$() retourne le nom du fichier choisi avec l' OPEN_DIALOG. Exemple: - Code:
-
dim a$: rem déclaration d'une variable string open_dialog 1:rem création de l'objet système open_dialog numéro 1 a$=file_name$(1):rem dans a$ on a le nom absolu du fichier choisi
Dernière édition par le Ven 7 Déc 2007 - 20:49, édité 2 fois | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Ven 7 Déc 2007 - 18:51 | |
| - Citation :
- Les boutons ne sont pas très jolis, mais je n'ai pas su y mettre autre chose que du texte (y dessiner des flèches par exemple).
Il est théoriquement possible avec Windows de visualiser des images sur des boutons et même de visualiser des images différentes selon l'état du bouton (enfoncé ou relaché). Puisqu'il y a une demande dans ce sens, le prochain objet système qui sera ajouté dans PANORAMIC sera un bouton pouvant visualiser une image. Je mets ça dans ma "TO DO LIST" (liste déjà très longue!!! de choses à faire). | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Ven 7 Déc 2007 - 18:52 | |
| - Citation :
- Il faudra ensuite imprimer l'image résultat (qui est aux bonnes proportions) à la bonne dimension (35x45), sur papier et imprimante adéquats, ceci est une autre histoire.
Je rajoute à cette "TO DO LIST": mettre la possibilité d'imprimer un objet. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Ven 7 Déc 2007 - 21:14 | |
| Merci, tout ça fera un pas de géant pour l'humanité... Pour les boutons, sans aller jusqu'à y afficher une image donnée, je voulais juste pouvoir tracer des lignes dessus, c.à.d. y dessiner les flèches moi-même. Pour le moment je ne peux guère aller plus loin, faute de variables en quantité suffisante. Il faut dire qu'en Basic on disposait d'une quantité quasi illimitée, sans déclaration préalable, et je ne m'en privais pas, et une fois les mauvaises habitudes prises... L'utilisation du IF sans ELSE me pose aussi de petits problèmes à contourner. Par exemple par des branchements, mais vu la limitation en Labels... De même l'absence de sortie prématurée de boucle (exemple: recherche d'un caractère dans une chaîne, on est obligé de noter l'emplacement trouvé dans une autre variable ! et de continuer le balayage jusqu'à la fin)
Autre chose: Si j'introduis le OPEN_DIALOG 1 au début, je consomme le numéro d'objet 1 et je suis en dépassement des limites. Il n'est pas possible de récupérer pour un autre objet ce numéro qui ne sert que pendant les deux premières lignes du programme ? Je sais, ça choque un peu la logique, mais c'est toujours ces fichues limitations... | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Ven 7 Déc 2007 - 22:32 | |
| OK, j'ai bien compris votre demande.
Je viens de mettre à disposition une version de PANORAMIC_EDITOR qui permettra de programmer de manière plus confortable: - 40 variables, - 35 objets système, - 40 labels, - 40 tests IF, - 40 boucles WHILE, - 40 boucles REPEAT, - 25 objets 3D, - 20 sprites, - et des tableaux de 200 éléments.
Cette version ne comporte que cette modification par rapport à la version précédente : le traitement des événements à la fin de chaque boucle REPEAT ou WHILE n'est pas encore implémenté. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Ven 7 Déc 2007 - 23:21 | |
| Merveilleux ! je n'en demandais pas plus pour continuer ! Merci beaucoup.
EDIT: un bug gênant dans le nouvel Editeur: après chaque exécution du source, le menu 'Run(F9)' devient grisé et inopérant, qu'il y ait eu erreur ou non. Il faut après chaque exécution sauvegarder, quitter puis relancer l'Editeur pour continuer. | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Sam 8 Déc 2007 - 11:33 | |
| Dans l'EDITEUR ou dans l'IDE, on peut lancer PANORAMIC (qui est le logiciel qui exécute le source et qui réside de manière interne dans l'EDITEUR et dans l'IDE) de 3 façons: - par le menu (RUN) - par la touche F9 - par le bouton "Flash" (éclair rouge)
Pour éviter de lancer simultanément et plusieurs fois de suite l'exécution du même code, dès le lancement d'une exécution de code, ces 3 types de lancement sont inactivés (menu en grisé, icône Flash et touche F9 sans effet) jusqu'à l'arrêt naturel de l'exécution du code.
Dès que l'exécution du code s'arrête (par END dans le source), PANORAMIC envoye un message de "fin d'exécution" à l'EDITEUR ou à l'IDE pour que ces derniers puissent "réactiver" les 3 façons d'exécuter le code.
Il ne s'agit donc pas d'un BUG, mais d'un fonctionnement normal et qui existait déjà dans les précédentes versions.
D'après ce que vous me décrivez, je pense que l'exécution de votre source ne s'arrête pas. Il suffit qu'il exécute la commande END pour voir le bouton grisé RUN redevenir actif...
Ce fonctionnement peut être néanmoins considéré comme gênant. Je vais regarder la possibilité de "tuer" l'exécution d'un programme qui bouclerait et qui ne s'arrêterait pas. Un bouton ou un menu "Kill" par exemple serait bien utile pour la mise au point d'un programme.
Merci pour toutes vos observations, qui me permettent d'améliorer mon logiciel. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Sam 8 Déc 2007 - 16:32 | |
| J'ai le même phénomène si je déroule - Code:
-
REM TEST.BAS BUTTON 1 CAPTION 1,"Bouton" TOP 1,5 LEFT 1,10 END Le bouton s'affiche dans la fenêtre 0, je quitte en cliquant sur la croix blanc sur rouge de la fenêtre, ce qui efface la fenêtre et ramène dans l'Editeur, et je me retrouve en grisé... EDIT: est-ce que je n'ai pas atteint un nombre limite d'exécutions ? Je précise que j'ai rechargé l'Editeur, sans changement (si j'essaie avec l'ancien éditeur il me dit tout de suite que la DEMO a expiré). | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Sam 8 Déc 2007 - 17:54 | |
| Il n'y a pas de nombre limite d'exécution et il n'y a plus de date d'expiration. Je regarde le problème avec votre exemple. | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Sam 8 Déc 2007 - 18:53 | |
| En effet, il y avait un problème dans le message interne de fin d'exécution envoyé vers l'EDITEUR.
J'ai mis à disposition une nouvelle version qui corrige cela. De plus, la nouvelle version force Windows à traiter les événements à la fin des boucles REPEAT/UNTIL et WHILE/END_WHILE : le DISPLAY n'est donc plus nécessaire.
Cette version est une version "instantanée" : elle contient aussi une commande FILE_READBUF N,V$,T qui lit T octets du fichier texte numéro N et les met dans la variable chaine V$. Cette commande n'est pas encore documentée (pas de fiche dans le manuel de référence et pas de coloration syntaxique) et je n'ai pas fini de la tester. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Sam 8 Déc 2007 - 21:04 | |
| Que de solutions un un temps si court ! je vais étudier ça. Quand vous dites: FILE_READBUF N,V$,T qui lit T octets du fichier texte numéro N et les met dans la variable chaine V$.
je considère que c'est valable pour tous les fichiers, y compris binaires, et que la commande est insensible aux 0D 0A ? En effet, l'usage que j'en ferais serait par exemple d'aller lire dans l'en-tête d'un fichier .BMP la largeur et la hauteur de l'image, en pixels (octets 19 à 22 et 23 à 26). Je le fais actuellement avec un FILE_READ_LN, mais on n'est pas à l'abri qu'il y ait une valeur 0A quelque part qui stopperait la lecture. Ceci (j'ai fait sauter le DISPLAY du REPEAT): - Code:
-
... DIM f1$, finfo$, iview$, i% REM f1$ = image d'origine, iview$ = pathname de IrfanView finfo$ = "Z:\INFOS.TXT" ... 43 REM ***** Infos de l'image d'origine (dimensions) 44 IF FILE_EXISTS(finfo$) = 1 THEN FILE_DELETE finfo$ 45 EXECUTE iview$ + f1$ + " /info=" + finfo$: REM infos sur l'image d'origine 46 REPEAT: UNTIL FILE_EXISTS(finfo$) = 1 47 FILE_OPEN_READ 5, finfo$ 48 FOR i% = 1 TO 6: FILE_READLN 5, a$: NEXT i% 49 FILE_CLOSE 5 50 FILE_DELETE finfo$ me donne une erreur " File Does Not Exists Line: 47", comment est-ce possible ? (je suis obligé de tester l'existence du fichier car la fonction EXECUTE est passante et rend la main immédiatement). Y a-t'il un problème (sortie prématurée) dans la boucle d'attente ? | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Dim 9 Déc 2007 - 16:49 | |
| Le problème que vous signalez (impossibilité d'ouvrir un fichier alors qu'on vient de tester son existence) me parrait bizarre en effet. Je regarde cela en simulant votre problème : - création d'un fichier TXT par un autre programme exécutable lancé par EXECUTE, - exécution du code qui pose problème, et je vous donne des nouvelles...
Un manière de contourner cela serait peut-être une fonction qui lance un programme externe et qui attend la fin de son exécution, une sorte de EXECUTE_FINISH ... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Dim 9 Déc 2007 - 18:46 | |
| Effectivement, en lançant un programme externe on a en général besoin qu'il ait terminé son exécution pour continuer. Mais le mieux ce serait que le test fonctionne, plutôt que de multiplier les commandes... En attendant j'ai remis un WAIT 500 après l'EXECUTE, et là ça marche, mais ce n'est pas très élégant.
J'ai aussi une erreur bizarre systématique en fin d'exécution: 'No Corresponding REPEAT Found, Line 265' en plein milieu d'une définition d'objet, rien à voir (en plein milieu des 8 dernières lignes du programme que j'ai donné plus haut). Et j'ai vérifié, pas d'UNTIL orphelin non plus... | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Lun 10 Déc 2007 - 21:15 | |
| Au lancement (RUN), un test est fait sur l'égalité du nombre de IF sans THEN par rapport au nombre de END_IF, sur le même nombre de FOR et de NEXT, de REPEAT et d'UNTIL, de WHILE et de END_WHILE. Si le même nombre n'est pas trouvé, l'exécution ne démarre pas.
Je n'ai pas encore regardé en détail le test FILE_EXISTS, mais il se peut que le fichier ait été créé, qu'il soit dans un buffer d'écriture de Windows, mais pas encore réellement écrit sur disque. Car FILE_EXISTS demande à Windows si le fichier existe. Peut-être que Windows répond qu'il existe car il est prêt à l'enregistrer sur disque. Windows utilise beaucoup l'écriture retardée pour optimiser les périphériques. Or FILE_OPEN veut ouvrir un fichier physiquement sur le disque qu'il ne trouve pas (car il n'existe pas encore) et donc déclenche une erreur. Windows m'a joué beaucoup de tours ... Il arrice qu'on lance une séquence de commandes de dessin, mais que Windows exécute d'abord celle qui lui parait la plus rapide, sans se préoccuper de l'ordre des commandes! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Travaux pratiques: extraction de photo d'identité Lun 10 Déc 2007 - 22:19 | |
| Merci pour ces précisions, je vais regarder ça de plus près.
J'ai édité mon code pour le mettre à jour, mais toujours cette erreur de nombre de REPEAT incorrect, qui intervient sur le END. J'ai vérifié le source, autant de UNTIL que de REPEAT, et je n'utilise que la structure IF ... THEN ... J'ai essayé de remplacer les IF c1 OR c2 THEN action par IF (c1 OR c2) THEN ... mais sans résultat.
Pour le FILE_EXISTS, il va falloir que je garde mes WAIT, mais il faut les dimensionner largement et ce n'est pas absolu ni très élégant. Il m'arrive au premier lancement de retomber en erreur d'ouverture. | |
| | | Contenu sponsorisé
| Sujet: Re: Travaux pratiques: extraction de photo d'identité | |
| |
| | | | Travaux pratiques: extraction de photo d'identité | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |