Digigraph ou comment simuler une table à digitaliser avec un scanner

Description

A partir d?une image scannée d?un graphique, sauvegardée en .BMP, DigiGraf permet de digitaliser les points de ce graphique en pointant successivement ces points à la souris, le résultat peut être enregistré dans un fichier texte pour utilisation ultérieure par exemple dans un tableur.

Utilisation :
Le programme lit et affiche l?image (utiliser la fonction Ouvrir BMP du menu Fichier), cette image peut être un graphique X,Y (voir exemple figure 1), une carte en courbes de niveau, ou tout autre image que l?on peut analyser en un nombre limité de points.
Lorsque l?image est affichée, il faut définir les échelles en utilisant la fonction Echelles du menu Numériser, puis en précisant :
- un point origine,
- l?extrémité (ou tout autre point différent de l?origine) de l?axe des X (abcisses)
- l?extrémité (ou tout autre point différent de l?origine) de l?axe des Y (ordonnées).
Il suffit ensuite de cliquer sur les différents points dont on veut connaître les coordonnées dans le système d?axes du graphique.
Lorsque tous les points souhaités ont été saisis, on peut sauvegarder les valeurs des coordonnées X, Y dans un fichier texte (fonction Enregistrer TXT du menu Fichier).
Ce fichier peut, à son tour, être ouvert par exemple dans Excel pour reconstruire éventuellement un nouveau graphique, ou dans tout autre logiciel acceptant de lire un fichier texte, dans lequel les valeurs seront présentées en tableau.

Programmation
Outre le fichier Digigraf.dpr, entièrement créé par Delphi, auquel ont seulement été ajoutées les deux lignes permettant l?affichage de la boîte d?explication au démarrage, le projet comporte :
- une fiche intro, portant un mémo qui affiche le texte de présentation du programme, l?auteur etc.
- une fiche principale digigra1, avec le bitmap, le menu principal et les composants de dialogue standard pour charger le fichier BMP et enregistrer le fichier TXT ;
- une fiche outils, constituant une sorte de palette flottante, comportant des boutons doublant les fonctions les plus utiles du menu ;
- une fiche tableau, portant un composant TStringGrid (grille de chaînes) dans lequel seront gardées les valeurs numérisées ; cette fiche, ainsi que la fiche outils, sont rendues toujours visibles en mettant leur propriété FormStyle à la valeur fsStayOnTop;
- une petite fiche choixserie avec un label et un spinedit, permettant de déterminer la série utilisée (prévu en cas d?extension du projet permettant de numériser plusieurs courbes d?un même graphique dans le même fichier.

A noter que dans la fiche principale digigra1, la clause Uses Uoutils, Utableau, UConsigne, UNumeroSerie est déclarée dans l?implémentation uniquement car ces unités font elles-mêmes appel à des procédures situées dans digigra1. Il y a donc des références circulaires d?unités, que Delphi résout aussi bien que Turbo-Pascal et de la même façon. C?est le seul aspect un peu inhabituel (quoique documenté) de la programmation.

Performances :
Résolution : elle dépend de la résolution adoptée lors du passage au scanner du document original. Pour un format A4 scanné à 100 DPI, l?image fait environ 800x1200 pixels, la précision de saisie tant d?un pixel à l?écran, cela représente 1/100eme de pouce soit 0,25mm environ, précision de l?ordre de celle d?une impression courante. On peut, bien-sûr régler le scanner à une résolution plus grande, l?image chargée dans Digigraf sera alors plus grande et plus précise. Cela suppose que le document de départ est assez précis et que le scanner n?introduit pas d?erreur ni de distorsion.
Taille de l?image et temps de calcul : sur Pentium II, je n?ai rencontré aucune limitation par la vitesse des calculs, compte tenu de leur extrême simplicité. Ayant essayé des images de près de 1800x900 je n?ai pas atteint non plus les limites de la taille du BitMap. La documentation de Delphi n?indique pas quelles sont les limites du composant StringGrid, vraisemblablement la mémoire centrale disponible ... Pour de très grandes images, il reste possible de scanner par parties, après avoir reporté un quadrillage sur le document à scanner. Le raccord des différentes parties est rendu facile par le fait que DigiGraf permet d?introduire les coordonnées de l?origine du repère, qui peuvent donc être différentes de 0,0.

Conclusion :


Un grand merci à tous ceux qui partagent leurs sources et à tous ceux qui les y aident.
Une pensée émue pour le magazine Pascalissime qui m'a tant servi à mes débuts avec Pascal puis avec Delphi et que je n'ai plus retrouvé en kiosque depuis des années.

Remarque:
La programmation est pour moi un passe temps utilitaire; ce qui compte, c'est la fonction dont j'ai besoin... Je ne prends pas toujours le temps de peaufiner mes applications et encore moins leur texte source. J'en demande pardon, notamment pour l'absence de commentaires. Mais comme c'est un source, libre à chacun de l'adapter à ses goûts et à ses besoins.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.