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 VCL Delphi Discussion :

Dessiner dans un TImage zoomable


Sujet :

Composants VCL Delphi

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 496
    Points : 269
    Points
    269
    Par défaut Dessiner dans un TImage zoomable
    Bonjour

    Je veux dessiner un croquis et l'afficher à l'écran tout en permettant un redimensionnement par simple action sur la taille du TForm.

    J'ai lu le post de Jipété sur la double représentation du graphique dans un TImage et notamment l'avertissement /!\ Redimensionner le TImage ne redimensionne pas le bitmap /!\

    Je constate qu'une instruction Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height); remplit effectivement le graphique sur la surface du TImage mais ne le fait plus si on modifie la taille de l'image -via le resize de la Form)

    Faut il obligatoirement recréer un nouveau TImage pour faire varier la taille du graphique ? Ou existe t il un moyen de redimensionner le Canvas "volatile".

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 683
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 683
    Points : 7 130
    Points
    7 130
    Par défaut
    Il ne faut pas plutôt dessiner dans le Canvas du bitmap du TImage (Image.Picture.Bitmap.Canvas), plutôt que le canvas du TImage (Image.Canvas) ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (16.3)

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 768
    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 768
    Points : 25 729
    Points
    25 729
    Par défaut
    Vous confondez le TImage et son TBitmap interne


    Pourquoi ne pas plutôt utilisé une TPaintBox et une Bitmap en cache ?
    OnPaint sera lancé à chaque fois que nécessaire, a vous de gérez le dessin, il est possible d'utiliser un Bitmap de cache pour ne pas tout recalculer et n'ajouter que ce qui est nécessaire.
    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

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 496
    Points : 269
    Points
    269
    Par défaut
    Citation Envoyé par Lung Voir le message
    Il ne faut pas plutôt dessiner dans le Canvas du bitmap du TImage (Image.Picture.Bitmap.Canvas), plutôt que le canvas du TImage (Image.Canvas) ?

    Dans ce post,
    https://www.developpez.net/forums/d1.../#post10745952
    Jipété écrit aussi ceci
    Un TImage se compose de 2 parties (2 canvas) :
    - un TGraphic, habituellement un TBitmap contenant l'image persistante (pour y écrire : imgPersiste.Picture.Graphic.Assign(SrcBitmap) ou imgPersiste.Picture.Bitmap := SrcBitmap, mais vérifier sa taille avant d'y dessiner),
    - et l'aire visuelle, volatile, laquelle est peinte à chaque OnPaint (pour y écrire : imgVolatile.Canvas.Draw(0, 0, SrcBitmap).

    Image.Picture.Graphic = canvas persistant de stockage
    Image.Canvas = canvas volatile d'affichage

    Il est plus que conseillé de dessiner sur le canvas volatile de TImage puisqu'il se charge de tout et s'occupe de sauvegarder le dessin dans le canvas persistant.
    C'est pourquoi j'écris dans le canvas volatile

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 496
    Points : 269
    Points
    269
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Vous confondez le TImage et son TBitmap interne


    Pourquoi ne pas plutôt utilisé une TPaintBox et une Bitmap en cache ?
    OnPaint sera lancé à chaque fois que nécessaire, a vous de gérez le dessin, il est possible d'utiliser un Bitmap de cache pour ne pas tout recalculer et n'ajouter que ce qui est nécessaire.
    Je ne pense pas les "confondre" mais je pensais effectivement que la taille du TImage.canvas suivait celle du TImage puisque le Canvas ne possède pas cette propriété.

    Or effectivement le TPaintBox a bien ce comportement. Si sa taille est modifié le canvas l'est également.

    Alors merci !

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 768
    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 768
    Points : 25 729
    Points
    25 729
    Par défaut
    Oui car le Timage a un Canvas (CanvasControl du Parent en réalité puis que c'est un TGraphicControl ) et le Picture/Graphic a aussi son Canvas

    Pour un dessin temps réel, la TPaintBox est clairement le mieux, c'est fait pour !
    Le Timage c'est pour une image statique
    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

Discussions similaires

  1. Dessiner dans le canvas d'un TImage à partir d'une DLL
    Par KlausGunther dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/02/2022, 19h30
  2. EInvalidGraphic sur chargement d'un jpeg dans un TImage
    Par tomtom7 dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/02/2007, 13h54
  3. Dessiner dans un TImage
    Par cre3000 dans le forum Delphi
    Réponses: 1
    Dernier message: 14/02/2007, 18h36
  4. Image en mosaique dans un TImage
    Par Maitre Dragon dans le forum C++Builder
    Réponses: 6
    Dernier message: 31/07/2004, 14h18
  5. Dessiner dans un JPanel
    Par Oliveuh dans le forum Composants
    Réponses: 5
    Dernier message: 19/07/2004, 13h13

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