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

l0lwut 4 Messages postés samedi 17 septembre 2011Date d'inscription 3 février 2012 Dernière intervention - 3 févr. 2012 à 12:16 - Dernière réponse : l0lwut 4 Messages postés samedi 17 septembre 2011Date d'inscription 3 février 2012 Dernière intervention
- 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 

5 réponses

Répondre au sujet
Utilisateur anonyme - 3 févr. 2012 à 13:09
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 3 févr. 2012 à 13:50
+3
Utile
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]
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
l0lwut 4 Messages postés samedi 17 septembre 2011Date d'inscription 3 février 2012 Dernière intervention - 3 févr. 2012 à 13:20
0
Utile
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
l0lwut 4 Messages postés samedi 17 septembre 2011Date d'inscription 3 février 2012 Dernière intervention - 3 févr. 2012 à 13:36
0
Utile
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
l0lwut 4 Messages postés samedi 17 septembre 2011Date d'inscription 3 février 2012 Dernière intervention - 3 févr. 2012 à 14:03
0
Utile
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.