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 :

Écrire sur une image


Sujet :

Delphi

  1. #1
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut Écrire sur une image
    bonjour tout le monde
    est ce qu'on peut écrire sur une image?
    et est il possible de mettre une image comme un fond pour un EDIT

    merci

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Tu peux écrire avec ça :
    NomdeL'image.Canvas.TextOut(x,y,text)

    text est du type string
    x et y sont du type integer

    Pour mettre une image en fond d'un edit je pense que ça doit etre possible en le faisant hériter d'une propriété image mais je sais pas comment

  3. #3
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    il faut associer un canvas à l'edit qui n'en possède pas...

    dc:THandle

    dc avec getwindowDC(edit1.handle) pour obtenir le contexte graphique de l'édit.
    canvas:=Tcanvas.create;
    canvas.handle:=dc; lier le canvas au contexte graphique

    puis un canvas.draw(0,0,monimagebmp)

    canvas.free et releaseDC(dc,0)

    ça devrait marcher...

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Je teste^^

    canvas:=Tcanvas.create;
    erreur sur ça :/

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    ça marche !!!!!!!!!!!!!!!!!

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      dc:=getwindowDC(edit1.handle);
    // lier le canvas au contexte graphique
    image:=TBitmap.create;
    image.LoadFromFile('fond.png');
    Canvas.handle:=dc;
    canvas.draw(0,0,image);
    canvas.free;
    releaseDC(dc,0);
     
    end;
    quand je clique sur le bouton, l'edit se remplit de l'image chargée dans "image".

    Mais à la fin du programme ça me dit :
    ---------------------------
    Erreur d'application
    ---------------------------
    Exception EAccessViolation dans le module Project1.exe à 00000000.
    Violation d'accès à l'adresse 00000000. Lecture de l'adresse 00000000.
    ce message à été copié grace à une astuce vue dans le topic astuces de delphi^^

    EDIT :
    Le message d'erreur n'apparait pas si je ne libere pas le canvas.

  6. #6
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    je ne sais pas ça ne marche pas avec moi la compilation se bloque au niveau de
    Canvas.handle:=dc;

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Fais un test :
    1) cree un nouveau projet vide (juste une form)
    2) met un edit
    3) met un bouton
    4) dans le click du bouton tu met le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      dc:=getwindowDC(edit1.handle);
      // lier le canvas au contexte graphique
      image:=TBitmap.create;
      image.LoadFromFile('fond.png');
      Canvas.handle:=dc;
      Canvas.draw(0,0,image);
      //canvas.free;
      releaseDC(dc,0);
    end;
    En t'assurant du bon chemin de l'image indiquée.

    ça marche chez moi^^

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Présenté comme cela, cela ne marche pas!
    Bonjour à toutes et à tous,

    @ Dragonno et pour Sky88, ton code ne peux fonctionner tel quel, en effet tu crées un bitmap que tu ne libères pas et de plus tu appelles dans ce bitmap une image au format Png !

    De plus, tu n'indiques pas tes variables.

    Enfin ceci serait plus correct sans message d'erreur.

    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
     
    { -- use PNG format -- remove/insert double-slash}
    {$DEFINE SAVEPNG}
     
    {$IFDEF SAVEPNG}
      { -- use PNG with PNGImage -- remove/insert double-slash}
        {$DEFINE PNGLIB1}
      { -- use PNG with zPNG -- remove/insert double-slash}
        {$DEFINE PNGLIB2}
    {$ENDIF}
     
    {$IFDEF SAVEPNG}
       {$IFDEF PNGLIB1}
         {$MESSAGE 'La prise en charge du format PNG est activée avec PNGImage.'}
       {$ELSE}
         {$IFDEF PNGLIB2}
           {$MESSAGE 'La prise en charge du format PNG est activée avec zPNG.'}
         {$ELSE}
           {$MESSAGE warn 'La prise en charge du format PNG est activée avec une librairie inconnue.'}
         {$ENDIF}
       {$ENDIF}
    {$ELSE}
       {$MESSAGE warn 'La prise en charge du format PNG est Désactivée.'}
    {$ENDIF}
     
    unit Unit1;
     
    interface
    Puis ajout dans le Uses:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Uses Jpeg{$IFDEF PNGLIB1},PNGImage{$ELSE}{$IFDEF PNGLIB2},zPNG{$ENDIF}{$ENDIF}
    puis ceci :

    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
    dc:THandle;
    image : TPNGObject ;
    begin
     dc:=getwindowDC(edit1.handle);
      // lier le canvas au contexte graphique
      image:=TPNGObject.Create;
      image.LoadFromFile('fond.png');
      Canvas.handle:=dc;
      Canvas.draw(0,0,image);
      //canvas.free;
      releaseDC(dc,0);
     image.Free;
    end;
    Et cela fonctionne !

    @+,

    Cincap

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Chez moi ça marche très bien et sans erreurs
    Moi j'ai chargé un png mais lui il est pas obligé

    Ha t'a raison il y avait juste la variable dc qui était indiquée :/
    il faut associer un canvas à l'edit qui n'en possède pas...
    dc:THandle
    Sinon moi dans mon essai qui marche j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    image:TBitmap;
    dc:THandle;
    Mais pas dans mon dernier exemple puisque je ne montre que la procédure

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Désolé ce n'est pas correct !
    @ Dragonno, désolé mais tu induis tout le monde en erreur ou il manque une précision en effet tu indiques :

    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
    procedure TForm1.Button1Click(Sender: TObject);
    Var
    
    image:TBitmap; // Suite à mes remarques
    dc:THandle;// Suite à mes remarques
    
    begin
      dc:=getwindowDC(edit1.handle);
      // lier le canvas au contexte graphique
      image:=TBitmap.create; // Impossible avec cela de charger un Png comme tu l'indiques 
    image.LoadFromFile('fond.png');
      Canvas.handle:=dc;
      Canvas.draw(0,0,image);
      //canvas.free;
      releaseDC(dc,0);
    end;
    Un format PNG n'est pas un Bitmap.

    Donc ton code est erroné sauf si tu indiques à tous que :

    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
     var
    dc:THandle;
    image : Tbitmap ;
    begin
     dc:=getwindowDC(edit1.handle);
      
      image := TBitmap.create;
    
      image.LoadFromFile('fond.bmp'); // et non fond.png dans ce contexte
      Canvas.handle:=dc;
      Canvas.draw(0,0,image);
    
      releaseDC(dc,0);
      image.Free;
    Si tu veux charger le format PNG il faut ceci :

    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
    dc:THandle;
    image : TPNGObject ;
    begin
     dc:=getwindowDC(edit1.handle);
      // lier le canvas au contexte graphique
      image:=TPNGObject.Create;
      image.LoadFromFile('fond.png'); 
     Canvas.handle:=dc;
      Canvas.draw(0,0,image);
      //canvas.free;
      releaseDC(dc,0);
     image.Free;
    end;
    J'espère que tu as compris.

    @+,

    Cincap

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    OUi j'ai compris bien sûr

    Je me répète
    Moi j'ai chargé un png mais lui il est pas obligé
    Sinon moi j'ai la librairie graphicx mais lui est pas obligé de mettre un png

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Je sais que tu as chargé un png !
    @ Dragonno, je sais que tu as chargé un png mais même avec ta librairie, tu auras un bug si tu fais comme tu l'as dit à sky88.

    Png est un objet, tu ne saurais pas le charger dans un Tbitmap.create.

    @+,

    Cincap

  13. #13
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Mais pourquoi ça marche sans erreur chez moi alors ?


    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
    unit test;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls, StdCtrls, GraphicEx;
     
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
    Form1:TForm;
    image:TBitmap;
    dc:THandle;
     
    implementation
     
    {$R *.DFM}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     dc:=getwindowDC(edit1.handle);
      // lier le canvas au contexte graphique
      image:=TBitmap.create;
      image.LoadFromFile('fond.png');
      Canvas.handle:=dc;
      Canvas.draw(0,0,image);
      //canvas.free;
      releaseDC(dc,0);
    end;
     
    end.

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Fonctionne pas !
    @ Dragonno, désolé je viens de faire une fiche en copiant exactement ton code et en utilisant la librairie GraphicEx (en enlevant la mienne) et j'ai un bug au chargement 'Image bitmap incorrecte" ce qui démontre ce que je te dit.

    De plus dans ton code tu crées la variable Image et tu ne la libère pas.

    Je suis certain de ce que j'avance concernant le png.

    Tu as certainement modifié quelque chose sur ta fiche ou tu charges un bitmap dont l'extension est png (à vérifier faux png).

    @+,

    Cincap

  15. #15
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Désolé si ça marche pas chez toi :/
    j'ai testé le listing que j'ai affiché avant de l'afficher et ça marche donc je ne peux rien dire de plus, je ne comprend pas si ça ne marche pas chez toi :/
    d'un autre coté je ne dis pas que si ça marche chez moi ça doit marcher chez tout le monde, mais le fait est que j'ai affiché le listing et il fonctionne.
    Par contre c'est vrai que je libere pas le bitmap à la fin.

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Je viens de faire un test !
    @ Dragonno, j'ai pris une texture en bmp, soit fond2.bmp, je l'ai renommé fond2.png et ton code fonctionne.

    Mais pas avec un vrai PNG !!!!!!!!!!!!!!!!!!!!.

    Voici la réponse, tu ne sais pas chargé un object (png) dans un bitmap comme tu l'indiques sauf si c'est un faux.

    @+,

    Cincap

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Oui mais les graphics fonctionnent toujours chez moi !
    @ Dragonno, c'est pour avancer et non t'ennuyer, le code que tu as proposé ne fonctionnera pas chez les autres sauf si une indication m'échappe.

    Mais retiens ceci le vrai format png est un objet et ne peut être chargé comme tu l'indiques dans un Tbitmap.

    @+,

    Cincap

  18. #18
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Je sais bien que c'est pas pour m'ennuyer
    Mais ce que je dis c'est juste que le code affiché fonctionne bien chez moi et qu'il est tel quel sur ma fiche, sauf que le bitmap n'est pas libéré à la fin, mais bon, j'ai testé cette fois avec la libération de 'image' et ça marche pareil.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     dc:=getwindowDC(edit1.handle);
      // lier le canvas au contexte graphique
      image:=TBitmap.create;
      image.LoadFromFile('fond.png');
      Canvas.handle:=dc;
      Canvas.draw(0,0,image);
      image.free;
      releaseDC(dc,0);
    end;
     
    Est-ce que la différence entre toi et moi vient de ma version de Delphi  ?
    (Delphi 5 standard)

  19. #19
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Vérifie ton fichier image !
    @ Dragonno, vérifie ton fichier "Fond.png", je doute que c'est un vrai format png.

    Essaye en cherchant sur le net une image png et fais le test.

    Avec ce vrai format tu auras un bug avec ton code.

    Maintenant si cela va pour toi, tant mieux.

    Cela n'a rien à voir avec la version de Delphi mais bien des formats graphics.

    @+,

    Cincap

  20. #20
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Je teste^^
    J'ai ouvert le fichier "fond.png" dans un logiciel d'image et il le reconnait comme un bmp avec mauvaise extension.
    Je l'ai re-enregistré au format png pour tester et le code ne fonctionne pas !
    (Mais remarque bien que je n'ai jamais dis que tu avais tord, je disais juste que ça marchait chez moi hein )

    Et souviens-toi que je disais qu'il n'etait pas obligé de mettre un png mais plutot un bmp^^

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [GD] Écrire sur une image existante
    Par lemirandais dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 14/01/2009, 23h47
  2. [GD] Est il possible écrire avec PHP sur une image JPG ?
    Par arnaudperfect dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 28/11/2008, 17h36
  3. Écrire sur une image
    Par djdolphin dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 18/01/2007, 22h12
  4. Comment écrire sur une image, dans un cadre ?
    Par Nutrino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 20/05/2005, 00h55
  5. [HTML]Peut-on écrire un texte sur une image ?
    Par flogreg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 28/02/2005, 17h24

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