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

Langage Delphi Discussion :

Utiliser ScanLine avec tout les formats d'images


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de Onimaru
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Turquie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2010
    Messages : 283
    Points : 129
    Points
    129
    Par défaut Utiliser ScanLine avec tout les formats d'images
    Salut à tous

    Y a t il un moyen rapide pour convertir les formats usuels (bmp, gif, png, jpeg, tiff, ...) en bitmap afin d'utiliser scanline ?

    Merci.

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 289
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 289
    Points : 1 940
    Points
    1 940
    Par défaut
    La librairie GraphicEx permet de charger ces formats.
    Je ne l'ai utilisé que avec des TImage (qio ont une propriétés Picture.Bitmap).

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Cela dépend de la version de Delphi

    En XE2, JPEG, PNG, ... sont gérés par le TPicture, donc tu peux utiliser Graphic

    Le TPicture utilise des classes héritant de TGraphic, une Factory utilise l'extension de l'image pour déterminer la classe a instancier recensée dans la Class Registry accessible via RegisterFileFormat

    Ce Graphic peut être assigné à un TBitmap par Assign
    Si tu veux gérer manuellement le type sans passer par TPicture, utilise TJPEGImage ou TPngImage, TGIFImage

    Ensuite pour les formats comme TIFF, il te faut une librairie externe ou utiliser TWICImage qui se comporte comme le TPicture mais c'est fois si ce n'est pas du code Delphi mais les API Windows Imaging Component (WIC)

    Après, tu as d'autres lib chez JEDI ou Graphic32 !
    certaines lib ajoutent via RegisterFileFormat de nouveau TGraphic pour des formats non gérés nativement ou remplacer la classe standard par une classes plus performante

  4. #4
    Membre habitué Avatar de Onimaru
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Turquie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2010
    Messages : 283
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Cela dépend de la version de Delphi

    En XE2, JPEG, PNG, ... sont gérés par le TPicture, donc tu peux utiliser Graphic

    Le TPicture utilise des classes héritant de TGraphic, une Factory utilise l'extension de l'image pour déterminer la classe a instancier recensée dans la Class Registry accessible via RegisterFileFormat

    Ce Graphic peut être assigné à un TBitmap par Assign
    Si tu veux gérer manuellement le type sans passer par TPicture, utilise TJPEGImage ou TPngImage, TGIFImage

    Ensuite pour les formats comme TIFF, il te faut une librairie externe ou utiliser TWICImage qui se comporte comme le TPicture mais c'est fois si ce n'est pas du code Delphi mais les API Windows Imaging Component (WIC)

    Après, tu as d'autres lib chez JEDI ou Graphic32 !
    certaines lib ajoutent via RegisterFileFormat de nouveau TGraphic pour des formats non gérés nativement ou remplacer la classe standard par une classes plus performante

    Salut, comment utiliser assign ?
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Image1.Picture.LoadFromFile(OpenPictureDialog.FileName);
    Image1.Picture.Bitmap.Assign(Image1.Picture.Graphic);

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Ah oui tu ne cherche pas plus de 5 secondes !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture.Bitmap.Assign(Image1.Picture.Graphic);
    Décortiquons cette ligne !

    Image1.Picture contient une Image disons un JPEG
    Image1.Picture.Bitmap, mince le TPicture contient un JPEG, le programmeur veut un bitmap, on libère le JPEG et l'on créé un Bitmap vide
    .Assign(Image1.Picture.Graphic), maintenant, Picture contient un Bitmap Vide, et on lui affecte ce qu'il contient !

    C'est balot non !

    Reprise de Texte sur image JPEG ou Socket et envoi d'image


    Code c++ : 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
      TJPEGImage* DummyJPEg = new TJPEGImage();
      try
      {
        DummyJPEg->LoadFromFile("C:\\Dossier\\Fichier.JPEG");
     
        TJPEGImage* DummyBitmap = new TBitmap();
        try
        {
          DummyBitmap->Assign(DummyJPEg);
          DummyBitmap->Canvas->ScanLine...
        }
        __finally
        {
          delete DummyBitmap;
        }
      __finally
      {
        delete  DummyJPEg;
      }
    }

  6. #6
    Membre habitué Avatar de Onimaru
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Turquie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2010
    Messages : 283
    Points : 129
    Points
    129
    Par défaut
    Salut,

    J'ai trouvé comment faire :

    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Image1.Picture.LoadFromFile(OpenPictureDialog.FileName);
    Bitmap := TBitmap.Create;
    Bitmap.Assign(Image.Picture.Graphic);
    Bitmap.PixelFormat := pf24bit;// ou le format souhaité

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Oui Assign, c'est mieux qu'un Draw(0, 0...)

    Si tu veux éviter d'avoir un TImage sur la Form, tu dois pouvoir créer ton Picture à la volée, j'avoue n'avoir jamais essayé

    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
    Bitmap := TBitmap.Create;
    try
      with TPicture.Create() do
      try
        LoadFromFile(OpenPictureDialog.FileName);
        Bitmap.Assign(Graphic);
        Bitmap.PixelFormat := pf24bit;
      finally
        Free();
      end;
     
      Bitmap.ScanLine();
    finally
      Bitmap.Free();
    end;

  8. #8
    Membre habitué Avatar de Onimaru
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Turquie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2010
    Messages : 283
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Oui Assign, c'est mieux qu'un Draw(0, 0...)

    Si tu veux éviter d'avoir un TImage sur la Form, tu dois pouvoir créer ton Picture à la volée, j'avoue n'avoir jamais essayé

    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
    Bitmap := TBitmap.Create;
    try
      with TPicture.Create() do
      try
        LoadFromFile(OpenPictureDialog.FileName);
        Bitmap.Assign(Graphic);
        Bitmap.PixelFormat := pf24bit;
      finally
        Free();
      end;
     
      Bitmap.ScanLine();
    finally
      Bitmap.Free();
    end;
    C'est vrai et c'est mieux comme ça, merci

  9. #9
    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 266
    Points
    3 266
    Par défaut
    Bonjour,

    Sinon, il y a aussi cette possibilité pour récupérer le BitMap d'un fichier-image afin de pouvoir ensuite manipuler les Scanline's de ce BitMap:

    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
    uses axCtrls; // pour TOleGraphic
     
    function  BMPdeIMG(const nomFichierImg : string) : tBitMap;
    const     FormatsSupportes = '.BMP.DIB.GIF.ICO.JIF.JPG.WMF.EMF';
    var       OleGraphic: TOleGraphic; FS: TFileStream; ext : string; img : tImage;
    begin     ext:=UpperCase(ExtractFileExt(nomFichierImg));
              if (ext='') or (pos(ext,FormatsSupportes)=0) then
              begin showMessage(ext+' = Format non supporté par BMPdeIMG');
                    Result:=nil; EXIT;
              end;
              OleGraphic := TOleGraphic.Create;
              FS := TFileStream.Create(nomFichierImg, fmOpenRead or fmSharedenyNone);
              img:= tImage.Create(Application);
              try
                 OleGraphic.LoadFromStream(FS);
                 img.Picture.Assign(OleGraphic);
                 Result :=tBitmap.create;
                 with Result do
                 begin PixelFormat:=pf24Bit;
                       Width :=img.Picture.Width;
                       Height:=img.Picture.Height;
                       Canvas.Draw(0, 0, img.Picture.Graphic);
                 end;
              finally
                 fs.Free;
                 img.free;
                 OleGraphic.Free;
              end;
    end; // BMPdeIMG
    A+.

  10. #10
    Membre habitué Avatar de Onimaru
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Turquie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2010
    Messages : 283
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Bonjour,

    Sinon, il y a aussi cette possibilité pour récupérer le BitMap d'un fichier-image afin de pouvoir ensuite manipuler les Scanline's de ce BitMap:

    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
    uses axCtrls; // pour TOleGraphic
     
    function  BMPdeIMG(const nomFichierImg : string) : tBitMap;
    const     FormatsSupportes = '.BMP.DIB.GIF.ICO.JIF.JPG.WMF.EMF';
    var       OleGraphic: TOleGraphic; FS: TFileStream; ext : string; img : tImage;
    begin     ext:=UpperCase(ExtractFileExt(nomFichierImg));
              if (ext='') or (pos(ext,FormatsSupportes)=0) then
              begin showMessage(ext+' = Format non supporté par BMPdeIMG');
                    Result:=nil; EXIT;
              end;
              OleGraphic := TOleGraphic.Create;
              FS := TFileStream.Create(nomFichierImg, fmOpenRead or fmSharedenyNone);
              img:= tImage.Create(Application);
              try
                 OleGraphic.LoadFromStream(FS);
                 img.Picture.Assign(OleGraphic);
                 Result :=tBitmap.create;
                 with Result do
                 begin PixelFormat:=pf24Bit;
                       Width :=img.Picture.Width;
                       Height:=img.Picture.Height;
                       Canvas.Draw(0, 0, img.Picture.Graphic);
                 end;
              finally
                 fs.Free;
                 img.free;
                 OleGraphic.Free;
              end;
    end; // BMPdeIMG
    A+.
    Merci pour la réponse

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

Discussions similaires

  1. [Études] Liste de toutes les formations info
    Par Le Marlou dans le forum Etudes
    Réponses: 74
    Dernier message: 04/03/2021, 12h09
  2. Réponses: 5
    Dernier message: 04/07/2014, 14h50
  3. [OL-2007] image en pièce jointe qui s'affiche avec toutes les pièces jointes
    Par Morgann Noémie dans le forum Outlook
    Réponses: 3
    Dernier message: 14/12/2010, 10h32
  4. Réponses: 2
    Dernier message: 07/12/2005, 14h15
  5. lenght marche avec tout les navigateurs?
    Par Death83 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 21/09/2005, 15h09

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