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 

Votre réponse

5 réponses

Meilleure réponse
Utilisateur anonyme - 3 févr. 2012 à 13:09
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)

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 3 févr. 2012 à 13:50
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]

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

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
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
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
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
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
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.