|
Lecteur de Transparents - John COLIBRI.
|
- résumé : Ce projet lit un fichier .PNG et permet la navigation dans ces
fichiers
- mots clé : .PNG - fichier graphique - affichage - navigation
- logiciel utilisé : Windows XP, Delphi 6.0
- matériel utilisé : Pentium 1.400Mhz, 256 M de mémoire, 120 Giga de disque
dur
- champ d'application : Delphi 1 à 2005 sur Windows
- niveau : débutant en Pascal et Delphi
- plan :
1 - Introduction
Nous fournissons un certain nombre de présentations sur ce site. Chaque page
est stockée sous forme d'un fichier graphique au format .PNG. Actuellement, le
.ZIP contient un fichier .HTML qui permet de visualiser les pages successives
en faisant défiler les images.
Nous présentons ici un programme Delphi simple qui charge les image une à une
et permet de naviguer dans la suite des images
2 - Le programme
2.1 - Les fichiers .PNG
Nous utilisons depuis plus de deux ans les fichiers graphiques au format .PNG.
Nous avons choisi ce format:
- car il est, semble-t-il, libres des problèmes de Copyright qui affectent les
fichiers .GIF
- il existe plusieurs unités Delphi qui permettent de lire et écrire des
tBitmap à partir de fichiers .PNG.
- ils prennent plus de temps à charger qu'un fichier .BMP simple, compte tenu
de la compression effectuée, mais sont aussi plus compacts, ce qui permet
d'avoir des .ZIP de taille raisonnable
2.2 - La Lecture des fichiers .PNG
Nous lisons les fichiers .PNG en utilisant une unité que nous avons trouvée sur
le Web, et dont l'auteur essentiel semble être Jack Goman. Cet auteur a utilisé
une unité d'importation d'une librairie LibPng.DLL, réalisée par d'autre
auteurs. Nous avons scrupuleusement laissé les copyrights de ces deux unité,
que nous avons utilisées sans aucune modification.
L'unité u_png_dll_import.pas contient les définitions Delphi correspondant à
LPng.DLL. Nous avons laissé toutes les primitives, mais les procédures qui ne
sont pas utilisées par u_png_unit.pas sont en commentaire.
L'unité u_png_unit.pas contient les deux fonctions de base:
- pour lire un fichier .PNG et l'afficher, nous appelons:
function f_read_bitmap_from_png_file(p_full_file_name: string;
p_c_bitmap: TBitmap): boolean;
|
et:
- p_full_file_name contient le nom du fichier (chemin, nom et extension)
- p_c_bitmap est une tBitmap qui a créée avant l'appel
- pour écrire un fichier .PNG (sauvegarder une tBitmap dans un fichier .PNG),
nous pouvons utiliser:
function f_write_bitmap_to_png_file(p_full_file_name: string;
p_c_bitmap: TBitmap; p_transparent_color: TColor): boolean;
|
et:
- p_full_file_name contient le nom du fichier (chemin, nom et extension)
- p_c_bitmap est une tBitmap qui doit être sauvegardée
- p_transparent est la couleur qui sera considérée par LPng comme la
couleur transparente
2.3 - L'affichage de transparents
Un projet simple permet de charger chaque fichier .PNG d'un répertoire dans une
tPaintBox. Et quelques boutons permettent le chargement des images successives
ou précédentes.
Voici un instantané sur un transparent:
Au niveau fonctionnement:
- la tFileListBox contient la liste des fichiers à afficher
- "load_" permet de charger et afficher le fichier courant de cette liste.
Nous utilisons simplement:
var g_c_bitmap: tBitmap= Nil;
g_c_bitmap:= tBitmap.Create;
f_read_bitmap_from_png_file(p_path+ p_file_name, g_c_bitmap);
PaintBox1.Canvas.Draw(0, 0, g_c_bitmap);
|
- les différents boutons, clicks souris et frappes clavier servent alors à
changer, charger et afficher un autre fichier .PNG
3 - Mode d'Emploi
Pour utiliser le lecteur:
Pour faciliter la démonstration, le .ZIP contient aussi 5 transparents de notre
présentation "UML et Design Patterns Delphi" que nous avions présenté à la
Borcon 2004 (et dont les transparents complets sont sur notre site http://www.jcolibri.com).
4 - Améliorations
Il s'agit d'un projet "minimal", adapté à nos transparents .PNG. Il est assez
aisé de l'améliorer:
- en généralisant le type de fichier graphique utilisé (.BMP, .JPEG ...)
- en évitant la convention sur les noms croissants: il suffit d'utiliser un
fichier .TXT associé et naviguer dans cette liste de noms de fichiers
- en ajoutant d'autres possibilités de navigation
Nous pouvons aussi réaliser un affichage de transparent en interprétant un
texte ASCII. C'est en fait ce que nous faisons:
- le texte des présentations est tapé dans Ed (notre éditeur, capable de
générer à la fois du PostScript (pour Pascalissime et les livres), du HTML
(pour ce site) et des bitmaps (pour l'affichage de transparents)
- à cause de la mise en page, la syntaxe est plus complexe que celle de
NotePad, et de ce fait, l'éditeur est assez volumineux
- c'est pourquoi nous avons préféré offrir les fichiers PNG résultants plutôt
que les textes au format Ed
Mais vous pouvez bien sûr partir d'un quelconque format textuel "enrichi" et
afficher le résultat dans tPaintBox.Canvas
5 - Télécharger le source
Pour télécharger, cliquez:
Ce .ZIP contient des chemins RELATIFS. Par conséquent:
- créez un répertoire n'importe où sur votre machine
- téléchargez en cliquant les liens ci-dessous
- placez le .ZIP dans votre répertoire
- dézippez et les sous-répertoires nécessaires seront créés
- compilez et exécutez
Au niveau sécurité:
- les .ZIP:
- ne modifient pas votre PC (pas de changement de la Base de Registre,
d'écrasement de DLL ou autre .BAT). Aucune modification de répertoire ou
de contenu de répertoire ailleurs que dans celui où vous dézippez
- ne contiennent aucun programme qui s'exécuterait à la décompression
(.EXE, .BAT, .SCR ou autre .VXD) ou qui seraient lancés plus tard
(reboot)
- passez-les à l'antivirus avant décompression si vous êtes inquiets.
- les programmes eux-mêmes ne changent pas la base de registre et ne modifient
aucun autre répertoire de votre machine
- pour supprimer le projet, effacez simplement le répertoire.
ATTENTION:
- le .ZIP contient LPng.Dll, que nous avons copié du site de Jack GOMAN. C'est
la même .DLL que nous utilisons depuis plus de 5 ans sans aucun souci, et,
si vous avez des angoisses, vous devez pouvez trouver des kyrielles de DLL
PNG équivalentes via Google.
- LPng.Dll doit être dans un chemin connu de l'EXE. Le mieux est de copier
cette DLL dans le même répertoire que l'EXE (ce qui est fait automatiquement
en dézippant notre projet)
Avec les mentions d'usage:
6 - L'auteur
John COLIBRI est surtout intéressé par la programmation en Pascal, Delphi et
Kylix. Son site contient des
articles, la descriptions de ses livres, le programme des stages qu'il anime
tous les mois.
|