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 :

Copier une image jpg dans une cellule dun DrawGrid


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut Copier une image jpg dans une cellule dun DrawGrid
    Bonjour,

    Je souhaite copier une image dans une cellule particulière d'un DrawGrid.
    L'image est au format jpg.

    Je n'ai pas d'erreur à l'exécution, mais je ne parviens pas à voir mon image.

    Voici le code :

    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
    procedure TForm3.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
    myRect:TRect;
    PhotoStation:TImage;
    begin
    PhotoStation:=TImage.Create(Self);
    //PhotoStation.Parent:=Self;
    PhotoStation.Width:=DrawGrid1.DefaultColWidth;
    PhotoStation.Height:=DrawGrid1.DefaultRowHeight;
    PhotoStation.Stretch:=True;
    //PhotoStation.Top:=100;
    //PhotoStation.Left:=100;
    PhotoStation.Picture.LoadFromFile('toto.jpg');
    MyRect:=DrawGrid1.CellRect(0,0);// On prends la position de la cellule
    DrawGrid1.Canvas.CopyRect(MyRect,PhotoStation.Canvas,PhotoStation.Picture.Bitmap.Canvas.ClipRect); // On copie le canevas dans cette cellule
    PhotoStation.Free;
    end;
    Voilà, j'espère que vous pourrez m'aiguiller.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par défaut
    Passer par une Timage, un composant visuel ? il y a aussi le TJPEGImage (jpeg.pas, présent dans Delphi 6 ...) qui est plus léger et non visuel

    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
    var
       DummyJPEg: TJPEGImage;
       DummyBitmap: TBitmap;
    begin
          DummyBitmap := TBitmap.Create();
          try
             DummyJPEg := TJPEGImage.Create();
             try
                DummyJPEg.LoadFromFile(JPEGFileName);
                DummyBitmap.Width := DummyJPEg.Width;
                DummyBitmap.Height := DummyJPEg.Height;
                DummyBitmap.Assign(DummyJPEg);
             finally
                DummyJPEg.Free();
             end;
          finally
             DummyBitmap.Free();
          end;
          DrawGrid1.Canvas.CopyRect(MyRect,DummyBitmap.Canvas,DummyBitmap.Bitmap.Canvas.ClipRect); 
    end;
    bon ce n'est pas exact c'est du code adapté de celui ci qui n'a pas de rapport direct, si ce n'est la manipulation de JPG ... tu devrais pouvoir corriger les petites erreurs qui y trainent, je ne l'ai pas testé ...
    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
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Merci ShaiLeTroll!

    Ton code fonctionne parfaitement

    Cependant, je ne peux qu'ouvrir des jpeg.
    Je me pose une question ... si je veux ouvrir un bmp ou un png, dois-je d'abord extraire l'extension de l'image et créer le bon objet?

    Je dis cela car avec le code que j'avais donné, ça fonctionnait pour les bmp.
    Ensuite, pour ce qui est de png, j'ai lu dans un post qu'une librairie existe (PngComponent 1.03)...

    Donc, d'après vous, la façon d'extraire l'extension et de créer les bons objets est elle acceptable (sachant que mon programme n'acceptera que les bmp, jpeg (jpg) et png).

    Merci

  4. #4
    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
    Par défaut
    Bonjour,

    1)
    Cependant, je ne peux qu'ouvrir des jpeg.
    ... normal car avec le code de ShaiLeTroll celui-ci te convertit le .jpeg en TBitMap (DummyBitmap: TBitmap) par contre une fois que tu as un TBitMap provenant d'une conversion ou d'ailleurs la ligne DrawGrid1.Canvas.CopyRect(MyRect,DummyBitmap.Canvas,DummyBitmap.Bitmap.Canvas.ClipRect);
    end; s'y applique également.

    2)
    si je veux ouvrir un bmp
    ... tu peux le faire comme ci-dessus pour un DrawGrid ou avec image1.Picture.Bitmap:=bmp; si le BitMap a été créé et récupéré ailleurs, ou bien directement comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if openpicturedialog1.execute then
      begin
       try
         Image1.Picture.LoadFromFile(OpenPictureDialog1.Filename);
       except
         on EInvalidGraphic do
         begin
           Image1.Picture.Graphic := nil;
           showmessage('Fichier image '+OpenPictureDialog1.Filename+ ' : incorrect.');
           exit;
         end;
       end;
    ... et avec ce code tu récupères les mêmes formats d'image que ceux que tu peux récupérer directement en mode conception via L'Inspecteur d'Objets avec la propriété Picture (en clickant sur les trois points) ... c'est à dire ceux qui sont énumérés dans la propriété Filter de l'OpenPictureDialog1 standard.

    3)
    si je veux ouvrir ... un png dois-je d'abord extraire l'extension de l'image et créer le bon objet?
    ... dans n'importe quel cas il faut que le code identifie d'abord le format de l'image avant de passer à la suite. Pour le png je sais qu'il faut le déclarer dans le type var monPNG: TPNGObject mais ce type n'existant pas sous Delphi-5 je m'en suis passé jusqu'à présent (je convertis tout en .Bmp avec PaintShopPro ça simplifie les codes, bigre). Par contre tu peux consulter le site :http://delphipage.free.fr il y a une rubrique (dernière ligne) intitulée "Tutorial : Utiliser les formats graphiques de type GIF, PNG, TIFF et TGA en Delphi" qui renvoie, pour le png, vers une unité pngimage.zip (283 Ko).
    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Merci pour ces infos

    Toujours dans le coin quand il faut

    Bonne soirée

  6. #6
    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
    Par défaut
    Salut Ero-sennin :

    Cela m'intéresserait à l'occasion de savoir la piste que tu as suivie pour les .png :
    - conversion des .png en .Bmp avec un outil comme PaintShopPro pour simplifier le code ?
    - utilisation d'unités spécialisées du type pngimage.zip ?
    - ou autre ?
    ... car la récupération des .png m'intéresse juste pour les convertir en .bmp avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function PNGToBitmap(PNG: TPNGObject): TBitmap;
    begin
      Result := TBitmap.Create;
      Result.Assign(PNG);
    end;
    ... par contre, comme sous Delphi-5 le type TPNGObject n'existe pas je ne me vois pas utiliser un pngimage.zip qui à l'état non décompressé fait à lui seul 283 Ko juste pour utiliser la fonction PNGToBitmap().
    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. Charger une image JPG dans une fiche - ADO/Delphi
    Par tleboukaka dans le forum Bases de données
    Réponses: 4
    Dernier message: 11/05/2010, 16h20
  2. Réponses: 0
    Dernier message: 07/06/2009, 12h31
  3. Insérer une image JPG dans une table
    Par jjcasalo dans le forum Développement
    Réponses: 7
    Dernier message: 15/01/2009, 14h53
  4. Réponses: 4
    Dernier message: 19/06/2008, 15h41
  5. position dans une image (selection dans une image)
    Par kaiseresis dans le forum Images
    Réponses: 3
    Dernier message: 31/05/2008, 13h30

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