IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

Firemonkey : TBitmap et Jpeg, plus de compression ?


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Par défaut Firemonkey : TBitmap et Jpeg, plus de compression ?
    Bonjour,

    J'ai un projet sous delphi "classique" qui enregistrait des BMP au format JPEG compressé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Jpg:=Tjpegimage.Create; // Jpg = creation d'une image JPG
    jpg.CompressionQuality:=80; // Compression
    jpg.Assign(Bitmap); // ici c'était un vcl.graphics.TBitmap !
    jpg.SaveToFile(gc_jpgpath); // Enregistrer
    Jpg.Free;
    Sous FireMonkey, pour la plateforme Mac OSX, le vcl.graphics.TBitmap et le Vcl.Imaging.jpeg.TJPEGImage ne sont plus utilisables.

    On utilise donc à la place le FMX.Types.TBitmap. Or il permet d'enregistrer directement au format JPEG. Le code précédent devient alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Bitmap.SaveToFile(gc_jpgpath, 'JPEG'); // Fmx.Types.TBitmap ici !
    Bien, merveilleux apparemment, puisqu'on a remplacé 5 lignes de code par une seule.

    Oui MAIS : Quand les fichiers enregistrés par la première méthode pesaient 15Ko en moyenne, les mêmes fichiers enregistrés par la seconde méthode pèsent plus de 120 Ko !

    Or la taille de moins de 20Ko pour les jpeg est une des contraintes imposées par le projet.

    Question : Comment préciser le taux de compression lors de l'enregistrement en jpeg d'un FMX.Types.TBitmap ?

    Je ne vois aucune propriété ou méthode dans les Fmx.Types.TBitmap pour faire ça, et aucune classe FMX pour les jpeg....

    André.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 093
    Par défaut
    FMX.Types.TBitmap.SaveToFile possède un paramètre optionnel Params
    sous MAC, l'implementation du TBitmapCodec doit être TBitmapCodecQuartz

    Il choisi le format en fonction de l'extension du fichier, ce n'est pas utile dans Params, essaye ceci, inspiré de FMX.Canvas.Mac, Ligne 497

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bitmap.SaveToFile(gc_jpgpath, 'quality=25');
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Par défaut
    Hélas cela ne change rien.
    Je vais investiguer sur ce "param"...

  4. #4
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 542
    Billets dans le blog
    10
    Par défaut
    Une piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    uses
      Vcl.Imaging.jpeg;
     
    .....
    with TJPEGImage.create do
    begin
      CompressionQuality := 80;
      Assign (Image1.Picture) ;
      SaveToFile ('essai1.jpg') ;
    end;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Par défaut
    @ALWEBER : Oui ça c'est précisément ce que fait mon appli sous Deplhi "classique". Sous Firemonkey, plateforme Mac : Impossible. Relis mon post d'origine

  6. #6
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 542
    Billets dans le blog
    10
    Par défaut
    La solution se trouve certainement dans :
    la
    function TBitmapCodecQuartz.SaveToFile
    de l'unité FMX.Canvas.Mac à inclure dans ton unité
    aux alentours de la ligne
    if System.SysUtils.CompareText(name, 'quality') = 0 then
    Attention. j'ai la dernière release de Delphi XE2, je pense que l'unité l'unité FMX.Canvas.Mac a été modifiée
    N'ayant pas de mac je n'ai pas pu tester cette solution

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/11/2006, 00h41
  2. Connaitre le taux de compression d'un JPEG
    Par diam's dans le forum Delphi
    Réponses: 2
    Dernier message: 01/09/2006, 19h21
  3. compression jpeg & DCT
    Par meera dans le forum C++
    Réponses: 7
    Dernier message: 03/07/2006, 15h02
  4. Compression Jpeg avec OpenIL
    Par Sebsheep dans le forum C
    Réponses: 2
    Dernier message: 01/07/2006, 08h55
  5. Compression d'une série d'images jpeg
    Par Tchello dans le forum Langage
    Réponses: 3
    Dernier message: 31/08/2003, 19h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo