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

Delphi Discussion :

Ouvrir un JPEG ou JPG ou PNG


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Developpeur Logiciel
    Inscrit en
    Mai 2016
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Developpeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 107
    Points : 66
    Points
    66
    Par défaut Ouvrir un JPEG ou JPG ou PNG
    Bonjour à tous !
    Je cherche un moyen d'ouvrir une image de type JPEG ou PNG dans mon Timage mais rien ne se passe, seul les BMP sont accepter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if extention = '.bmp' then
            begin
            image1.Visible := true;
            Image1.Picture.LoadFromFile(filename);
            end;
    Voilà mon code, peut être qu'il manque quelque chose je ne sais pas
    En tout cas merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Cela me rappelle un truc : il faut créer un TPngImage, TJPEGImage, peut-être un TPicture et utiliser la méthode assign pour charger sa bitmap

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Citation Envoyé par foetus Voir le message
    Cela me rappelle un truc : il faut créer un TPngImage, TJPEGImage, peut-être un TPicture et utiliser la méthode assign pour charger sa bitmap
    Ouais, puis surtout y a ça :
    Citation Envoyé par SimFaridas Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if extension = '.bmp' then // avec un "s", c'est comme tension, surtension, etc. -- mais pas comme attention, lol !
    C'est sûr qu'avec ça les .jpg et autres .png peuvent toujours aller se faire bronzer à la plage (c'est de saison), et surtout, surtout, il y a des millions de résultats sur ce sujet dans gogol...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Quelle version de Delphi utilises-tu ?
    Dans D5, il faut sûrement ajouter l'unité JPEG en uses, et pour png, voir s'il existe un équivalent.
    Pour une édition récente, je pense que le support de ces formats est de base.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    En utilisant les 3 unités : unit pngimage; unit pnglang; unit zlibpas;
    voici une fonction dont le Result renvoie le TBitmap extrait d'un fichier au format *.PNG :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    function BMPdePNG(const nomFichierPNG: string): TBitmap; // Avec Récup du canal Alpha
    var
      Png  :TpngObject;
      PngA :PByteArray;
      RGBA :PRGBQuad;
      x    :integer;
      y    :integer;
     
    begin
      Png := TpngObject.Create;
     
      try
        Result := TBitmap.Create;
     
        Png.LoadFromFile(nomFichierPNG);
     
        if Png.Header.ColorType in [COLOR_GRAYSCALEALPHA, COLOR_RGBALPHA] then
        begin
          //Bitmap 32 bits
          Result.PixelFormat := pf32bit;
          Result.Width       := Png.Width;
          Result.Height      := Png.Height;
          //showmessage('ici');
          ZeroMemory(Result.ScanLine[Result.Height -1], Result.Height *Result.Width *SizeOf(TRGBQuad));
     
          //Copie RGB
          Result.Canvas.Draw(0, 0, Png);
     
          //Copie couche alpha
          RGBA := Result.Scanline[Result.Height -1];
     
          for y := Result.Height -1 downto 0 do
          begin
            PngA := Png.AlphaScanline[y];
     
            for x := 0 to Result.Width -1 do
            begin
              RGBA.rgbReserved := PngA[x];
              inc(RGBA);
            end;
          end;
        end
        else Result.Assign(Png);
     
      finally
        Png.Free;
      end;
    end;
    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  6. #6
    Membre du Club
    Homme Profil pro
    Developpeur Logiciel
    Inscrit en
    Mai 2016
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Developpeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 107
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Bonjour,

    En utilisant les 3 unités : unit pngimage; unit pnglang; unit zlibpas;
    voici une fonction dont le Result renvoie le TBitmap extrait d'un fichier au format *.PNG :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    function BMPdePNG(const nomFichierPNG: string): TBitmap; // Avec Récup du canal Alpha
    var
      Png  :TpngObject;
      PngA :PByteArray;
      RGBA :PRGBQuad;
      x    :integer;
      y    :integer;
     
    begin
      Png := TpngObject.Create;
     
      try
        Result := TBitmap.Create;
     
        Png.LoadFromFile(nomFichierPNG);
     
        if Png.Header.ColorType in [COLOR_GRAYSCALEALPHA, COLOR_RGBALPHA] then
        begin
          //Bitmap 32 bits
          Result.PixelFormat := pf32bit;
          Result.Width       := Png.Width;
          Result.Height      := Png.Height;
          //showmessage('ici');
          ZeroMemory(Result.ScanLine[Result.Height -1], Result.Height *Result.Width *SizeOf(TRGBQuad));
     
          //Copie RGB
          Result.Canvas.Draw(0, 0, Png);
     
          //Copie couche alpha
          RGBA := Result.Scanline[Result.Height -1];
     
          for y := Result.Height -1 downto 0 do
          begin
            PngA := Png.AlphaScanline[y];
     
            for x := 0 to Result.Width -1 do
            begin
              RGBA.rgbReserved := PngA[x];
              inc(RGBA);
            end;
          end;
        end
        else Result.Assign(Png);
     
      finally
        Png.Free;
      end;
    end;
    A+.
    Merci pour cette fonction elle fonctionne très bien et est ce que je pourrais te demander si tu as la même mais pour les formats jpg ?

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    En ajoutant uses pngimage au projet, cette unité enregistre pour le TPicture l'association entre extension 'PNG' et l'objet qu'elle expose pour le décoder lors d'un LoadFromFile. A l'instar de l'unité JPEGImage pour le format JPEG. Et ce, grâce à un TPicture.RegisterFileFormat.
    Si ces 2 unités sont ajoutées au projet, un TImage(.Picture).LoadFromFile est censé ouvrir les png et jpeg...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    unit pngimage;
     
    //...
     
    initialization
      {Initialize}
      ChunkClasses := nil;
      {crc table has not being computed yet}
      crc_table_computed := FALSE;
      {Register the necessary chunks for png}
      RegisterCommonChunks;
      {Registers TPNGObject to use with TPicture}
      {$IFDEF UseDelphi}{$IFDEF RegisterGraphic}
        TPicture.RegisterFileFormat('PNG', 'Portable Network Graphics', TPNGObject); // ici !
      {$ENDIF}{$ENDIF}
    finalization
      {$IFDEF UseDelphi}{$IFDEF RegisterGraphic}
        TPicture.UnregisterGraphicClass(TPNGObject);
      {$ENDIF}{$ENDIF}
      {Free chunk classes}
      FreeChunkClassList;
    end.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    SimFaridas : Merci pour cette fonction elle fonctionne très bien et est ce que je pourrais te demander si tu as la même mais pour les formats jpg ?
    Oui tu peux demander :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Avec Jpeg dans le uses :
    
    function BMPdeJPEG(const nomFichierJPEG: string): TBitmap;
    var JPEGImage: TJPEGImage;
    begin Result := nil;
      if (nomFichierJPEG = '') then EXIT;
      try
        JPEGImage := TJPEGImage.Create;
        Result := TBitmap.Create;
        Result.PixelFormat := pf24Bit;
        try // test de chargement
          JPEGImage.LoadFromFile(nomFichierJPEG);
          JPEGImage.DIBNeeded;
          Result.Assign(JPEGImage);
        finally
          JPEGImage.Free;
        end;
      except
        Result := nil;
      end;
    end; // BMPdeJPEG
    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #9
    Membre du Club
    Homme Profil pro
    Developpeur Logiciel
    Inscrit en
    Mai 2016
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Developpeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 107
    Points : 66
    Points
    66
    Par défaut
    Merci énormément ! Ca fonctionne !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    if extention = '.bmp' then
            begin
            image1.Visible := true;
            Image1.Picture.LoadFromFile(filename);
            end;
     
            if (extention = '.png') then
            begin
              image1.Visible := true;
              Image1.Picture.Bitmap := BMPdePNG(filename);//Je fais appelle aux fonctions données par Gilbert Geyer
            end;
     
            if (extention = '.jpg') or (extention = '.jpeg') then
            begin
               image1.Visible := true;
                Image1.Picture.Bitmap := BMPdeJPEG(filename);//Je fais appelle aux fonctions données par Gilbert Geyer
            end;
    !!!!

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    SimFaridas : Ca fonctionne !
    Juste un détail : au lieu de if extention = '.bmp' then ...
    il serait plus prudent d'écrire : if LowerCase(extention) = '.bmp' then ...
    ou bien extention:=LowerCase(filename);

    Mais bon , on ne va pas chinoiser.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  11. #11
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    il serait plus prudent d'écrire : if LowerCase(extention) = '.bmp' then ...
    Je chinoiserai même plus en disant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if SameText(extension, '.bmp') then

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-salut,

    Guillemouze : if SameText(extension, '.bmp') then ...
    Merci car cela simplifie vu que SameText compare des chaînes sans tenir compte de la distinction minuscules/majuscules.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

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

Discussions similaires

  1. fonction minature jpg + gif + png
    Par speedylol dans le forum Langage
    Réponses: 4
    Dernier message: 01/04/2008, 14h57
  2. Ouvrir fichier jpeg
    Par bahaaldine dans le forum C
    Réponses: 10
    Dernier message: 10/12/2007, 21h47
  3. Convertir Eps en Jpg ou PNG
    Par aaakii dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 11/09/2007, 12h47
  4. Réponses: 15
    Dernier message: 25/06/2006, 00h30
  5. Réponses: 7
    Dernier message: 07/03/2006, 09h37

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