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

VC++ .NET Discussion :

Dessiner sur une pictureBox transparente


Sujet :

VC++ .NET

  1. #1
    Membre �clair�
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2008
    Messages
    289
    D�tails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 289
    Par d�faut Dessiner sur une pictureBox transparente
    bonjour,
    je travaille avec visual C++ 2010 express pour un appli cartographique.
    Je dessine sans pb sur un panel (lignes, rectangles, cercles...).
    Maintenant, je fais un peu plus compliqu�:
    le panel porte une image en background et une pictureBox que je rend transparente (comme si c'�tait une plaque de verre) et je tente de dessiner dessus.
    Le code dans le constructeur de ma Form:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    panel1->BackgroundImage = Image::FromFile("images/Abondance_small.jpg");
    pictureBox1->BackColor = System::Drawing::Color::Transparent;
    SetStyle(ControlStyles::SupportsTransparentBackColor, true);
    Rien ne se passe, aucun trac� n'est r�alis�.

    Peut-on dessiner sur une paintBox transparente?
    Le code est-il correct ou y a t'il un d�faut dans le raisonnement?

    Merci pour vos suggestions.

  2. #2
    Membre �clair�
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2008
    Messages
    289
    D�tails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 289
    Par d�faut dessin sur paintBox transparente bis
    Bonjour,
    en parlant aux autres, on r�alise o� l'on �crit de travers.
    Donc j'arrive � nouveau � tracer mes segments mais je bousille compl�tement la carte qui est sur le panel.
    C'est comme si la pictureBox ne jouait pas sont r�le de panneau de verre en me laissant dessiner sur le panel...

    Faut-il que je trace mes segments et rafra�chisse syst�matiquement la carte qui est en dessous? Ou y a t-il une autre technique?

    Merci.

  3. #3
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    Si vous �tes en d�but de projet, n'utilisez plus WinForms mais WPF car les effets de transparence semblent bien mieux g�r�s.

  4. #4
    Membre �clair�
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2008
    Messages
    289
    D�tails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 289
    Par d�faut
    bonsoir,
    ce n'est pas un projet au sens industriel du terme mais pour des �tudiants en cycle informatique.
    Je cherche � leur faire appr�hender le C++ � travers un EDI actuel. Visual C++ c'est d�j� du c++ avec du CLI en plus. J'aimerais en rester l� afin de ne pas trop charger l'apprentissage.

    Pour ce qui est de la phase faisabilit� du projet que je m�ne, j'en suis � dessiner des segments sur la pictureBox par dessus la carte port�e par le panel. Pour l'instant, je recharge la carte entre chaque dessin du segment. Le rendu n'est pas terrible bien s�r.

    Ce que je cherche � faire est il r�alisable avec un r�sultat acceptable ?

    Merci.

  5. #5
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    D�sol� pour le d�lai de r�ponse.

    La transparence peut �tre probl�matique avec WinForms, mais un prenant un peu de recul, je ne vois pas pourquoi vous avez besoin de cette pictureBox.
    le panel porte une image en background et une pictureBox que je rend transparente (comme si c'�tait une plaque de verre) et je tente de dessiner dessus
    Comme l'image est en background, les affichages du panel se feront sur le background, donc sans l'utilisation d'une pictureBox transparente.

    Pouvez-vous poster une solution VS2010 avec un projet minimaliste pour reproduire le probl�me ?

  6. #6
    Membre �clair�
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2008
    Messages
    289
    D�tails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 289
    Par d�faut
    bonjour,
    je ne suis pas aux pi�ces!!

    Mon souci vient du fait que je voulais dessiner un segment de mani�re continue tout en d�pla�ant la souris (comme dans Paint). Donc j'efface le segment "pr�c�dent" en prenant la couleur du fond puis je dessine le segment "courant" avec la couleur choisie. Tant qu'il n'y a pas d'image en background, c'est satisfaisant. Avec une image, celle-ci est affect�e par l'op�ration d'effacement du segment. D'o� mon id�e d'utiliser une pictureBox transparente par dessus le panel et dessiner sur cette pictureBox. Mais le r�sultat reste le m�me.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if(e->Button == System::Windows::Forms::MouseButtons::Left)
    {
    s->effacer(panel1);	//effacer "l'ancien" segment
    				pExt.X = e->X;
    				pExt.Y = e->Y;
    				s->setExtremite(pExt);
    				s->dessiner(panel1);	//dessiner le segment courant
    				//redessiner les segments qui ont pu être effacés
    				for(int i=0; i<conteneur->Count; i++)
    					conteneur[i]->dessiner(panel1);
    			}

  7. #7
    Membre �clair�
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2008
    Messages
    289
    D�tails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 289
    Par d�faut
    Je viens de d�couvrir que mettre une tabulation dans le code poste d'office ce que l'on est en train d'�crire.
    Je reprend donc � partir du 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    //code du gestionnaire d'évènement mouseMove
    if(e->Button == System::Windows::Forms::MouseButtons::Left)
    {
    	s->effacer(panel1);	//effacer "l'ancien" segment
    	pExt.X = e->X;
    	pExt.Y = e->Y;
    	s->setExtremite(pExt);
    	s->dessiner(panel1);	//dessiner le segment courant
    	//redessiner les segments qui ont pu être effacés
    	for(int i=0; i<conteneur->Count; i++)
    		conteneur[i]->dessiner(panel1);
    }
     
    //méthode effacer du segment
    void CSegment::effacer(Panel^ pA)
    {
    	Graphics^ g = pA->CreateGraphics();
    	//prendre la couleur du fond
    	Pen^ drawingPen = gcnew Pen(pA->BackColor);
    	g->DrawLine(drawingPen, pOrg, pExt);
    	delete g;
    }
     
    //méthode dessiner du segment
    void CSegment::dessiner(Panel^ pA)
    {
    	Graphics^ g = pA->CreateGraphics();
    	//prendre la couleur du segment
    	Pen^ drawingPen = gcnew Pen(couleur);
    	g->DrawLine(drawingPen, pOrg, pExt);
    	delete g;
    }
    C'est peut-�tre pas vraiment la bonne technique ou alors ce n'est pas possible avec les Forms.
    Une alternative: je ne dessine pas en continu le segment mais apr�s que les deux points aient �t� cliqu�s.

    Merci.

  8. #8
    Membre confirm�
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    76
    D�tails du profil
    Informations personnelles :
    �ge : 66
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 76
    Par d�faut
    Bonjour


    Ceci est juste une petite suggestion, plut�t que de travailler avec un picturebox ou tout autre type de contr�le auquel assigner de la transparence, pourquoi ne pas utiliser une Bitmap et dessiner sur cette Bitmap?

    exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Bitmap^ b = gcnew Bitmap( int l , int h , PixelFormat::Format32bppArgb );
     
    Graphics^ g = Graphics::FromImage(b);
     
    // dessiner sur g
     
    delete g;
    J'utilise cette m�thode sur une interface graphique pour la photo et �a marche tr�s bien.

  9. #9
    Membre �clair�
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2008
    Messages
    289
    D�tails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 289
    Par d�faut
    Bonjour,
    merci pour la suggestion. C'est ce qu'il me fallait.
    Merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Drag and drop sur une PictureBox
    Par abdiouldbody dans le forum VB 6 et ant�rieur
    R�ponses: 4
    Dernier message: 17/06/2009, 15h55
  2. Dessiner sur une image
    Par alex6891 dans le forum Java ME
    R�ponses: 1
    Dernier message: 16/04/2006, 02h45
  3. [Debutant] Un thread qui dessine sur une fenetre ???
    Par Spartan03 dans le forum OpenGL
    R�ponses: 6
    Dernier message: 05/04/2006, 20h19
  4. D�placer, zoomer, dessiner (sur) une image
    Par charlito dans le forum 2D
    R�ponses: 4
    Dernier message: 22/02/2006, 01h58
  5. [Servlet] [Image] Dessiner sur une image
    Par gaia_dev dans le forum 2D
    R�ponses: 5
    Dernier message: 01/09/2004, 17h11

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