Compresseur jpeg

Soyez le premier à donner votre avis sur cette source.

Vue 15 036 fois - Téléchargée 2 637 fois

Description

Ce code permet de compresser des images selon l'algorithme utilisé pour le format jpeg (DCT, RLE, Huffman...)

Conclusion :


Il doit surement avoir moyen d'aller plus vite, surtout dans l'implementation de l'algo d'Huffman, merci de vos eventuelles suggestions.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
on rêve...
si tu le veux dans un autre language, relève tes manches !

ici, on n'exige rien ; et on ne crie pas (majuscules), merci !
Messages postés
13
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
26 juin 2012

PUIS-JE AVOIR LE MEME CODE ECRIT SOUS BUILDER C++
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
32
procedure TForm1.OuvrirFichier(Name: String);
var
F : File of byte;
begin
Image1.Picture.LoadFromFile(Name);
AssignFile(F, Name);
Reset(F);
SizeDebut := FileSize(F);
CloseFile(F);

Longueur := Image1.Picture.Width;
Largeur := Image1.Picture.Height;

Lbl_Taille_Initiale.Caption := format('Taille initiale : %.2f Ko',[SizeDebut/1024]);
Lbl_Taille_Finale.Caption := 'Taille finale : ';
Lbl_Gain.Caption := 'Gain : ';
Lbl_TauxCompression.Caption := 'Taux de compression : ';
Lbl_TempsCompression.Caption := 'Temps de compression : ';
Lbl_TempsDecompression.Caption := 'Temps de dcompression : ';

Image2.Canvas.Pen.Color := clBtnFace;
Image2.Canvas.Brush.Color := clBtnFace;
Image2.Canvas.Rectangle(0, 0, Image2.Width, Image2.Height);
end;

___________________________________________


procedure TForm1.Button2Click(Sender: TObject);
begin
if Image1.Picture.Width = 0 then Exit;
Time := GetTickCount;
StatusBar1.Panels[0].Text := 'Compression...';
Application.ProcessMessages;

SaveTableauPixels; //Enregistre l'image initiale dans un tableau
ConvertRGBToYCrCb; //Convertit les couleurs de RGB vers YCrCb
DownSample; //Sous-chantillonne la chrominance
LevelShift; //Dcale toutes les valeurs de -128
ApplyDCT; //Applique la DCT
ApplyCoeffs; //Quantifie la matrice (seule tape de perte de l'algorithme)
CodageRLE; //Codage avec le systme RLE
CodageHuffman; //Codage avec le systme Huffman
SafeToFile; //Enregistre le fichier final

StatusBar1.Panels[0].Text := '';
Lbl_TempsCompression.Caption := format('Temps de compression : %.1f s', [(GetTickCount-Time)/1000]);
end;

____________________________________________


procedure TForm1.SaveTableauPixels;
var
I, J : Integer;
Ligne : ^TRGBArray;
begin
SetLength(TableauPixels, Longueur, Largeur, 3);
Image1.Picture.Bitmap.PixelFormat := pf32bit;
for J := 0 to Largeur - 1 do begin
Ligne := Image1.Picture.Bitmap.ScanLine[J];
for I := 0 to Longueur - 1 do begin
with Ligne[I] do begin
TableauPixels[I, J, 0] := rgbRed;
TableauPixels[I, J, 1] := rgbGreen;
TableauPixels[I, J, 2] := rgbBlue;
end;
end;
end;
end;

____________________________________________


if R < 0 then R := 0 else if R > 255 then R := 255;
if G < 0 then G := 0 else if G > 255 then G := 255;
if B < 0 then B := 0 else if B > 255 then B := 255;

>> uses Math;

R := Max( Min(R, 255), 0);
G := Max( Min(G, 255), 0);
B := Max( Min(B, 255), 0);
Ah mais je suis tout à fait d'accord avec toi. Il m'arrive aussi de re-coder des choses déjà faites automatiquement par Delphi (ou des composants additionnels) pour :
- Mieux les comprendre
- Donc mieux les utiliser
- Progresser

Bref, je n'enlève pas du tout le mérite de ton code.
Je te signalais juste une méthode simple au cas où tu ne la connaitrais pas.
Messages postés
21
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
5 janvier 2008

certes, mais c'est pas le but du code, qui est de montrer les étapes de l'algo de compression jpeg!
@+
Afficher les 6 commentaires

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.