English version

Le code Datamatrix



Ce code fait partie de la famille des codes à 2 dimensions, il peut encoder jusqu'à 2335 caractères sur une très petite surface.L'encodage se fait en deux étapes : tout d'abord les données sont converties en "mots-clé" de 8 bits. (Encodage de haut niveau) puis ceux-ci sont convertis en petits carrés noirs et blancs. (Encodage de bas niveau) De plus un système de correction des erreurs permet de reconstituer des données mal imprimées, effacées, floues ou arrachées. Dans la suite de cet exposé, l'expression "mot-clé" sera abrégée en MC et "code de Reed-Solomon" en RS.

La structure générale.

Un code de 2 x 2 régions :


L'encodage de bas biveau.

L'encodage de haut biveau.
La détection et la correction des erreurs.
La création des codes barres.
Maintenant que nous savons créer le motif d'un code barre, il nous reste à le dessiner à l'écran et à l'imprimer sur papier. Deux approches sont possibles : Il semble qu'il n'y ait pas de police gratuite pour codes barre Datamatrix sur le net. J'ai donc décidé de dessiner entièrement cette police et de la proposer en téléchargement. Puisque chaque symbole a un nombre pair de lignes et un nombre pair de colonnes, je met dans chaque caractère de la police 4 modules (2 lignes et 2 colonnes). De cette manière nous avons 16 combinaisons assignées aux 16 premières lettres majuscules.
Si nous donnons une valeur à chaque point de cette matrice de 2 X 2 comme ceci :
1 2 4 8
la valeur ASCII du caractère associé à une matrice donnée est la somme des valeurs de chaque point + 65 (65 = A = pas de point, tout blanc !)
La police " datamatrix.ttf "
Cette police contient les 16 caractères A (ASCII : 65) à P (ASCII : 80)

Copiez ce fichier dans le répertoire des polices, le plus souvent : \Windows\Fonts

Encodage d'un code datamatrix.

Le programme devra se dérouler en 4 étapes : Du fait de l'interaction entre les différents modes de compression il est difficile de faire une optimisation à 100%. Le programme va donc décomposer la chaine en "blocs" de type "numérique", "texte" ou "octet" puis il repassera certains blocs dans un autre mode si la surcharge dûe aux MC de commutation est supérieure au gain de compression. On ne pourra pas tenir compte de tous les paramètres tels les rembourrages ...

Un petit programme pour tester tout ça.

Voici un petit programme écrit en Visual Basic 6 ; le
fichier d'installation copiera le programme,
les dépendances Visual Basic, les fichiers sources et la police.

Fichier d'auto-installation :

Fichier ZIP sans installation :

La fonction Datamatrix$ fait plus de 750 lignes, je ne la reproduis donc pas ici, il suffit de la récuperer dans le fichier "form1.frm" qui se trouve avec le programme ci-dessus ; avec le programme d'auto-installation le fichier "form1.frm" se trouve dans le répertoire du programme, sous-répertoire "sources".

La fonction s'appelle de la manière suivante : resultat$ = Datamatrix$(Chaine$, Dimension%, Type%, CodeErr%)
Les trois derniers paramètres sont optionnels et sont passés par références; au retour ils contiennent les valeurs réellement utilisées. Valeurs de CodeErr% au retour de la fonction : Il suffit maintenant d'afficher ou d'imprimer la chaine resultat$ avec la police datamatrix par exemple dans un traitement de texte. Les utilisateurs d'Office pourront même intégrer la fonction Datamatrix$ dans une macro afin d'automatiser le traitement. Pour arriver à effectuer tous les traitements dans une unique fonction, j'ai dû utiliser des "Gosub" au lieu de fonctions avec paramètres; j'entends déjà les esthètes de la programmation hurler au sacrilège.


Vous aimez cette page ?

Elle vous est utile ?
Cliquez ici !