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

C# Discussion :

rendre persistant un draw sur un graphics


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut rendre persistant un draw sur un graphics
    Bonjour

    Il y a un truc que je ne maitrise toujours pas bien avec les graphics :


    1-je fais un graphics sur un bitmap crée a partir d'un picture box

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         Image Zoom = new Bitmap(pb_zoom.Width, pb_zoom.Height);
          Graphics graphics = Graphics.FromImage(Zoom);
    2- Je dessine des trucs dessus et puis j'assigne le bitmap au PB

    En faisant cela, j'ai une image de fond persistante sur laquelle je peux creer un nouveau graphics pour dessiner des images non persistantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          Graphics TmpGraphics = pb_zoom.CreateGraphics();
          TmpGraphics.DrawLine(Pens.Black, pZoomRef, pcur);

    Mais ce que j'aimerais faire c'est
    1- Garder mon image de fond crée au debut
    2- Redessiner des truc dessus qui ne disparaitront pas au moindre refresh
    3- Recuperer mon image de fond quand l'utilisateur a fini de bricoler dans l'image.


    Comment faire cela le plus facilement ?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Par défaut
    Il te faut que tu redessines à chaque demande de rafraichissement (WM_PAINT).

    Pour ce faire tu peux overrider OnPaint sur ton controle et dessiner depuis cette méthode.

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci,

    Mais j'ai peut etre mal posé la question :

    Quand je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       Image Zoom = new Bitmap(pb_zoom.Width, pb_zoom.Height);
          Graphics graphics = Graphics.FromImage(Zoom);
    Si j'ai bien compris, je dessine directement sur un bitmap de l'Image que j'ai appelé Zoom et puis je peux assigner cette image a mon picture box

    A partir de la pas de probleme de refresh, mon image est fixée

    Maintenant je veux pouvoir laisser l'utilisateur dessiner au dessus de cette image sans alterer l'image de base.
    Je souhaite que cela resiste a un refresh mais a tout moment pouvoir reprendre l'image de base


    J'avais pensé declarer l'image de base publique, faire un clone de cette image et dessiner sur le bitmap de ce clone.
    Et pouvoir a tout moment reprendre l'imagge de base

    Est-ce la bonne solution ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Par défaut
    J'ai déjà fait ce genre de truc, attention la galère...

    Ce que je te conseille déjà, c'est de regarder si tu peux pas passer à vs2008 et utiliser WPF (ya un controle InkCanvas qui fait déjà pratiquement ce que tu recherches)... ça sera bcp plus facile qu'avec les winforms et une bonne occasion de te former si c pas déjà fait...

    Si c'est pas possible, là tout de suite je vois qu'une seule solution :

    Tenir à jour une collections de "formes" et les redessiner pendant le OnPaint
    La création -> MouseDown / MouseMove / MouseUp...
    La sélection / déplacement -> regarde du coté des Adorners http://msdn2.microsoft.com/en-us/library/ms743737.aspx

    Faut aussi penser à la mise à l'echelle de tes formes lors du redimensionnement de l'image, etc...

    bref ya du boulot... voilou, bonne chance

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci

    Je suis déja en cSharp 2008

    C'est pas que je ne veux pas me former on contraire mais a la base ce que je fais est normalement simple

    Fondamentalement voici le bingz

    Ma form principale contient un picturebox
    Au chargement, je load un bitmap (une carte de pays)

    Ensuite je dessine des ellipses (points des villes selon une selection en base de donnée)

    Ca c'est mon image de base
    Pas besoin de resize etc tout est simple et fixe.

    L'utilisateur trace un rectangle sur un graphics que je construit sur le picture box
    Ce rectangle permet de definir une zone zoom que j'ouvre dans une autre fenetre

    Jusque la pas de probleme, je maitrise

    MAIS je veux que mon rectangle persiste jusqu'a la fermeture de la fenetre zoom
    MAIS je ne veux pas le coller dans l'image de base que je veux conserver intacte

    Vois tu une methode simple chef ?
    Mon idée de clonage est elle bonne ?

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Mon idée de clonage est elle bonne ?
    Ca marche.
    C'est ce que l'on a fait dans une appli, pour afficher une droite mobile qui se retrace dés que la souris bouge avec le click restant appuyé (le point de départ étant celui de du Mouse down et le pointeur de la souris) : à chaque mouvement de souris, on reprend le clone pour retracer la droite.

Discussions similaires

  1. question sur les graphics
    Par jayjay.f dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 11/11/2006, 11h26
  2. Rendre application standalone utilisable sur le Web ?
    Par Amnesiak dans le forum Général Java
    Réponses: 27
    Dernier message: 14/09/2006, 15h09
  3. Rendre le formulaire invisible sur ouverture etat
    Par kimar dans le forum Access
    Réponses: 4
    Dernier message: 24/07/2006, 15h33
  4. Rendre un onglet inactif sur un TPAGECONTROL
    Par richard038 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 12/09/2005, 09h58
  5. Rendre le curseur invisible sur une fenêtre donnée
    Par Meuhmeuh dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/11/2002, 12h25

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