PictureBox bords arrondis [Résolu]

Signaler
Messages postés
72
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
22 mai 2009
-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Bonjour,
J'ai fais pas mal de recherche pour essayer de trouver une réponse à mon probleme (qui me parait pas tres compliqué), mais je n'ai rien trouvé.

Je souhaite avoir une pictureBox sur mon formulaire avec des bords arrondis. Et donc l'image qui est dedans aura aussi des bords arrondis.
Je ne peux pas arrondir les angles de mes images à la main par un utilitaire de dessin, car mon projet est sensé ouvrir / afficher plus de 500 images. Donc je vais pas toutes les retravailler :)
(car j'aurai pu mettre une image au bord arrondi puis jouer sur la transparence de la picturebox).

Comment faire pour modifier ce composant ?

Merci

4 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
32
Salut, on peut jouer aussi avec la région du contrôle :

public Form1( )
{
    InitializeComponent( );


    Image img = Image.FromFile( @"C:\Users\Mike\Pictures\img.jpg" );
    GraphicsPath gp = GetRoundRect( 0.0f, 0.0f, 200.0f, 200.0f, 10.0f );


    PictureBox pb = new PictureBox( );
    pb.Parent = this;
    pb.Image = img;
    pb.Location = new Point( 20, 20 );
    pb.Size = new Size( 200, 200 );
    pb.Region = new Region( gp );


}
// http://www.bobpowell.net/roundrects.htm
public GraphicsPath GetRoundRect( float X, float Y, float width, float height, float radius)
{
    GraphicsPath gp = new GraphicsPath( );
    gp.AddLine(X + radius, Y, X + width - (radius*2), Y);
    gp.AddArc(X + width - (radius*2), Y, radius*2, radius*2, 270, 90);
    gp.AddLine(X + width, Y + radius, X + width, Y + height - (radius*2));
    gp.AddArc(X + width - (radius*2), Y + height - (radius*2), radius*2, radius*2,0,90);
    gp.AddLine(X + width - (radius*2), Y + height, X + radius, Y + height);
    gp.AddArc(X, Y + height - (radius*2), radius*2, radius*2, 90, 90);
    gp.AddLine(X, Y + height - (radius*2), X, Y + radius);
    gp.AddArc(X, Y, radius*2, radius*2, 180, 90);
    gp.CloseFigure();
    return gp;
}
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
47
Bonjour;
Le picturebox ne peut pas avoir des bords arrondis.
Deux solutions: Soit tu utilises WPF et là je pense que c'est assez simple, soit tu fais un programme qui itère sur chacune de tes images pour leurs donner, dans les 4 coins, la même couleur que le fond de ton programme, de cette manière on croira que le bord est arrondi....

<hr />
-My Blog-
Messages postés
72
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
22 mai 2009

Merci beaucoup.
C'est exactement ce qu'il me fallait.

Merci à tous les deux
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
47
Lutinore> Je n'y avais pas pensé, merci ;-)

<hr />
-My Blog-
-My WebSite-