Convertir un png en jpeg Delphi XE [Résolu]

Messages postés
4
Date d'inscription
samedi 17 septembre 2011
Dernière intervention
3 février 2012
- - Dernière réponse : l0lwut
Messages postés
4
Date d'inscription
samedi 17 septembre 2011
Dernière intervention
3 février 2012
- 3 févr. 2012 à 14:03
Bonjour,

J'ai un problème pour convertir une image png en jpeg que je ne m'explique pas vraiment, quand j'essaye d'assigner mon TPngImage à mon TJpegImage je lève le message d'erreur: "Impossible d'assigner TPngImage à TJpegImage".

Voilà la procédure que j'utilise:

procedure ConvertPNGToJPG(Source: String);
var
   png: TPNGImage;
   jpg: TJPEGImage;
begin
   png := TPNGImage.Create;
   jpg := TJPEGImage.Create;
   try
     png.LoadFromFile(Source);
     jpg.Assign(png);
     jpg.SaveToFile(ExtractFilePath(Application.ExeName)+'\pic.jpg');
   finally
     png.Free;
     jpg.Free;
   end;
end;


Si quelqu'un pouvait m'expliquer pourquoi ça ne marche pas ça serait d'une aide plus que précieuse.
Merci par avance.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
3
Merci
Salut

"Impossible d'assigner TPngImage à TJpegImage"
Ben le compilo il te dit simplement que ce que tu veux faire (
 jpg.Assign(png);
) est impossible.

Transformer un type en un autre, ça ne se fait pas comme ça (Transformer une pizza toi en tarte aux concombres)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
3
Merci
oui c'est tout à fait ça

voici une variante qui donne un meilleur résultat un pgn transparent et semi-transparent:

procedure ConvertPNGToJPG(Source: String);
var
   png: TPNGImage;
   bmp: TBitmap;
   jpg: TJPEGImage;
begin
   png := TPNGImage.Create;
   bmp := TBitmap.Create;
   jpg := TJPEGImage.Create;
   try
     png.LoadFromFile(Source);

     bmp.Width := png.Width;
     bmp.Height := png.Height;
     png.Draw(bmp.Canvas, bmp.Canvas.ClipRect);

     jpg.Assign(bmp);
     jpg.SaveToFile(ExtractFilePath(Application.ExeName)+'\pic.jpg');
   finally
     png.Free;
     bmp.Free;
     jpg.Free;
   end;
end;



[hr]@+Cirec
[hr]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de Cirec
Messages postés
4
Date d'inscription
samedi 17 septembre 2011
Dernière intervention
3 février 2012
0
Merci
Merci pour la précision, j'ai jamais été très bon en pâtisserie ^^
J'imagine que j'ai péché par optimisme, c'est une procédure que j'ai trouvée sur un forum j'avais donc présumé quelle était censé marcher... J'imagine que je vais devoir passer par une librairie du style RxliB (qui apparemment a quelques soucis avec XE) ? Ou XE peut-il gérer ça sans passer par une lib tierce ? J'avoue ne pas avoir trouvé beaucoup d'infos là-dessus.
Commenter la réponse de l0lwut
Messages postés
4
Date d'inscription
samedi 17 septembre 2011
Dernière intervention
3 février 2012
0
Merci
Bon je me répond à moi-même ça pourra toujours servir, il faut passer par un TBitmap et ça marche parfaitement (cf: http://stackoverflow.com/questions/7337889/save-picture-to-a-variety-of-file-formats).

procedure ConvertPNGToJPG(Source: String);
var
   png: TPNGImage;
   jpg: TJPEGImage;
   Bmp: TBitmap;
begin
   png := TPNGImage.Create;
   jpg := TJPEGImage.Create;
   bmp := TBitmap.Create;
   try
     png.LoadFromFile(ExtractFilePath(Application.ExeName)+'pic.png');
     bmp.Assign(png);
     jpg.Assign(bmp);
     jpg.SaveToFile(ExtractFilePath(Application.ExeName)+'pic.jpg');
   finally
     png.Free;
     jpg.Free;
     bmp.Free;
   end;
end;


Merci encore pour l'aiguillage.
Commenter la réponse de l0lwut
Messages postés
4
Date d'inscription
samedi 17 septembre 2011
Dernière intervention
3 février 2012
0
Merci
Merci pour la précision et l'optimisation, j'up mon code.
Commenter la réponse de l0lwut

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.