Convertir un png en jpeg Delphi XE

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

5 réponses

Utilisateur anonyme
3 févr. 2012 à 13:09
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)
3
Cirec
Messages postés
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
3 févr. 2012 à 13:50
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]
3
l0lwut
Messages postés
4
Date d'inscription
samedi 17 septembre 2011
Statut
Membre
Dernière intervention
3 février 2012

3 févr. 2012 à 13:20
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.
0
l0lwut
Messages postés
4
Date d'inscription
samedi 17 septembre 2011
Statut
Membre
Dernière intervention
3 février 2012

3 févr. 2012 à 13:36
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
l0lwut
Messages postés
4
Date d'inscription
samedi 17 septembre 2011
Statut
Membre
Dernière intervention
3 février 2012

3 févr. 2012 à 14:03
Merci pour la précision et l'optimisation, j'up mon code.
0