Traitement de compression de données Delphi(1)
L'outil de développement RAD Delphi 5.0 lancé par Borland Company est un outil de développement grand public sur la plate-forme Windows. Son environnement de développement visuel et ses puissantes fonctions de programmation orientée objet ont attiré d'innombrables développeurs. Cependant, certains programmeurs ont souvent du mal à compresser de grandes quantités de données au cours du processus de développement lui-même et doivent trouver des algorithmes de compression efficaces ou rechercher des contrôles tiers sur Internet pour obtenir la compression. Delphi lui-même ne fournit-il pas cette fonction ? En fait, les programmeurs Delphi y ont déjà pensé : ils ont fourni deux fichiers unitaires, Zlib.pas et Zlibconst.pas, pour résoudre le problème de compression des données et obtenir un taux de compression de données élevé. Ces deux fichiers sont enregistrés dans le répertoire InfoExtras lib sur le CD d'installation de Delphi 5.0. De plus, le fichier Obj référencé par l'unité Zlib.pas est également enregistré dans le répertoire InfoExtras libObj. L'article suivant prend la compression d'une copie d'écran comme exemple pour présenter comment utiliser cette fonction.
Idées de solutions
Tout d’abord, utilisez la copie d’écran pour capturer l’image actuelle de tout l’écran, puis enregistrez-la dans la mémoire au format de fichier BMP. Lors de la compression, utilisez l'objet TComPRessionStream pour compresser l'image originale et enregistrez-la dans un format de fichier personnalisé ; lors de la décompression, utilisez l'objet TDecompressionStream pour décompresser l'image compressée et la restaurer dans un fichier image au format BMP.
Mise en œuvre spécifique
Créez un nouveau fichier projet, référencez Zlib.pas dans la partie interface de l'unité principale, placez deux boutons Button1 et Button2 sur le formulaire principal, et écrivez le code d'appel de procédure correspondant dans leur événement OnClick.
Une partie du code source du programme est la suivante :
unité Unité1 ;
interface
utilise
Windows, messages, SysUtils, classes, graphiques, contrôles, formulaires, boîtes de dialogue, StdCtrls, Zlib ;
taper
TForm1 = classe(TForm)
Bouton1 : TButton ;
Bouton2 : TButton ;
procédure Button1Click (Expéditeur : TObject);
procédure Button2Click (Expéditeur : TObject);
privé
{Déclarations privées}
publique
{Déclarations publiques}
fin;
var
Formulaire1 : TForm1 ;
mise en œuvre
{$ R* .DFM}
1. Capturer une image en plein écran
procédure GetScreen(var Bmp: TBitmap);
var
CC : HDC ;
MonCanvas : TCanvas ;
MonRect : TRect ;
commencer
DC := GetWindowDC(0);
MonCanvas := TCanvas.Create;
essayer
MyCanvas.Handle := Dc;
MonRect:=Rect(0, 0,Screen.Width, Screen.Height);
fichier://L'image est en vraies couleurs 24 bits et peut également être ajustée en fonction des besoins réels
Bmp.PixelFormat := pf24bit;
Bmp.Width := MonRect.Right;
Bmp.Height := MonRect.Bottom;
fichier://capturer l'image en plein écran
Bmp.Canvas.CopyRect(MonRect, MonCanvas, MonRect);
enfin
MonCanvas.Handle := 0;
MyCanvas.Free;
LibérationDC(0, DC);
fin;
fin;
2. Compresser les images
procédure CompressBitmap(var CompressedStream: TMemoryStream;const CompressionLevel: TCompressionLevel);
var
SourceStream : TCompressionStream ;
DestStream : TMemoryStream ;
Nombre : entier ;
Commencer
file://obtient la taille d'origine du flux d'images
Nombre := CompressedStream.Size ;
DestStream := TMemoryStream.Create;
SourceStream :=TCompressionStream.Create
(Niveau de compression, DestStream) ;
Essayer
Le flux d'images d'origine est stocké dans le fichier://SourceStream
CompressedStream.SaveToStream(SourceStream);
file://compresse le flux d'images d'origine et le flux d'images compressé est stocké dans DestStream
SourceStream.Free ;
CompressedStream.Clear ;
file://écrit les dimensions de l'image originale
CompressedStream.WriteBuffer(Compte, TailleDe
(Compter));
file://Écrire un flux d'images compressé
CompressedStream.CopyFrom(DestStream, 0);
enfin
DestStream.Free ;
fin;
fin;
3. Restaurer les images compressées
procédure UnCompressBitmap(const CompressedStream : TFileStream ; var Bmp : TBitmap) ;
var
SourceStream : TDecompressionStream ;
DestStream : TMemoryStream ;