PictureBox bords arrondis

Résolu
cs_ChamY Messages postés 72 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 22 mai 2009 - 3 nov. 2008 à 19:59
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 4 nov. 2008 à 22:50
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
4 nov. 2008 à 12:24
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;
}
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
4 nov. 2008 à 08:27
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-
0
cs_ChamY Messages postés 72 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 22 mai 2009
4 nov. 2008 à 17:51
Merci beaucoup.
C'est exactement ce qu'il me fallait.

Merci à tous les deux
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
4 nov. 2008 à 22:50
Lutinore> Je n'y avais pas pensé, merci ;-)

<hr />
-My Blog-
-My WebSite-
0
Rejoignez-nous