FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Travaux pratiques: extraction de photo d'identité Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Travaux pratiques: extraction de photo d'identité Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Travaux pratiques: extraction de photo d'identité Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Travaux pratiques: extraction de photo d'identité Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Travaux pratiques: extraction de photo d'identité Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Travaux pratiques: extraction de photo d'identité Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Travaux pratiques: extraction de photo d'identité Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Travaux pratiques: extraction de photo d'identité Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Travaux pratiques: extraction de photo d'identité Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Travaux pratiques: extraction de photo d'identité Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Travaux pratiques: extraction de photo d'identité Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Travaux pratiques: extraction de photo d'identité Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Travaux pratiques: extraction de photo d'identité Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Travaux pratiques: extraction de photo d'identité Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Travaux pratiques: extraction de photo d'identité Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -17%
(Black Friday) Apple watch Apple SE GPS + Cellular ...
Voir le deal
249 €

 

 Travaux pratiques: extraction de photo d'identité

Aller en bas 
2 participants
AuteurMessage
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptyVen 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.92
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.
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
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2395
Date d'inscription : 28/05/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptyVen 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
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Jack
Admin
Jack


Nombre de messages : 2395
Date d'inscription : 28/05/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptyVen 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).
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Jack
Admin
Jack


Nombre de messages : 2395
Date d'inscription : 28/05/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptyVen 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.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptyVen 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...
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2395
Date d'inscription : 28/05/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptyVen 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é.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptyVen 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.
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2395
Date d'inscription : 28/05/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptySam 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.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptySam 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é).
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2395
Date d'inscription : 28/05/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptySam 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.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Jack
Admin
Jack


Nombre de messages : 2395
Date d'inscription : 28/05/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptySam 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.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptySam 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 ?
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2395
Date d'inscription : 28/05/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptyDim 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 ...
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptyDim 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...
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2395
Date d'inscription : 28/05/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptyLun 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!
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité EmptyLun 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.
Revenir en haut Aller en bas
Contenu sponsorisé





Travaux pratiques: extraction de photo d'identité Empty
MessageSujet: Re: Travaux pratiques: extraction de photo d'identité   Travaux pratiques: extraction de photo d'identité Empty

Revenir en haut Aller en bas
 
Travaux pratiques: extraction de photo d'identité
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Travaux pratiques: Dump fichier
» Méthode manuelle d'extraction de la racine carrée
» PHOTO : JPEG JFIF EXIF
» Positionnement GPS photo
» correction de parallaxe de vos photo

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: