[vb.net] rectangle arrondi [Résolu]

Signaler
Messages postés
489
Date d'inscription
mardi 16 novembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007
-
malhivertman1
Messages postés
489
Date d'inscription
mardi 16 novembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007
-
Bonjour, je creer un bitmap avec
        Dim MonBitMap As New Bitmap(Larg, Haut)

puis je dessine dedans en utilisant un graphics
        Dim MonObjGfx As Graphics
        MonObjGfx = Graphics.FromImage(MonBitMap)

j'aimerai que qd je créer un rectangle avec
        MonObjGfx.DrawRectangle
il est les bords arrondis.

Comment faire?

merci.

8 réponses

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
28
Salut,

Une petite recherche :



'Merci Badrbadr (http://www.csharpfr.com/codes/ROUNDEDRECTANGLE-CREEZ-RECTANGLES-AVEC-COINS-ARRONDIS_35392.aspx)

Private

Function
GetRoundedRectPath(
ByVal
Rect
As
System.Drawing.Rectangle,
ByVal
Radius
As

Integer
)
As
System.Drawing.Drawing2D.GraphicsPath

  
Dim
Diameter
As

Integer
= 2 * Radius

  
Dim
ArcRect
As

New
System.Drawing.Rectangle(Rect.Location,
New
Size(Diameter, Diameter))

  
Dim
Path
As

New
System.Drawing.Drawing2D.GraphicsPath()

  Path.AddArc(ArcRect, 180, 90)

  ArcRect.X = Rect.Right - Diameter

  Path.AddArc(ArcRect, 270, 90)

  ArcRect.Y = Rect.Bottom - Diameter

  Path.AddArc(ArcRect, 0, 90)

  ArcRect.X = Rect.Left

  Path.AddArc(ArcRect, 90, 90)

  Path.CloseFigure()

  
Return
Path

End

Function




Pour l'utilisation :



Dim
MonBitMap
As

New
System.Drawing.Bitmap(Larg, Haut)

'puis je dessine dedans en utilisant un graphics

Dim
MonObjGfx
As
System.Drawing.Graphics = System.Drawing.Graphics.FromImage(MonBitMap)

MonObjGfx.DrawPath(Pens.Red, GetRoundedRectPath(
New
System.Drawing.Rectangle(0, 0, 50, 50), 6))





Kenji
Messages postés
489
Date d'inscription
mardi 16 novembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007

ok c'est bon, j'ai pris la source
http://www.vbfrance.com/codes/RECTANGLES-ARRONDIS_38893.aspx
comme modèle et j'ai pu réussir ce que je voulais
++
Messages postés
489
Date d'inscription
mardi 16 novembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007

Je penser utiliser l'api RoundRect mais je n'arrive pas a m'en servir sur un bitmap
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
Salut,


De mémoire, (je ne suis pas sur mon pc, je n'ai donc pas testé...) :

Declare Function RoundRect Lib "gdi32" ( _
                 ByVal hdc As IntPtr, _
                 ByVal X1 As Integer, _
                 ByVal Y1 As Integer, _
                 ByVal X2 As Integer, _
                 ByVal Y2 As Integer, _
                 ByVal X3 As Integer, _
                 ByVal Y3 As Integer) as Integer


dim hdc as IntPtr

hdc = MonObjGfx.GetHdc

RoundRect(hdc, ...)

MonObjGfx.ReleaseHdc(hdc)


Voila !

Sur msdn, y'a un flag avant la fonction indiquant apparement qu'on fait
de l'unmanaged, je ne vois pas pourquoi, si un gourou peut éclairer ma
lanterne ... Si jamais ca marche pas mets-le, regarde dans l'exemple... (http://msdn2.microsoft.com/fr-fr/library/9z5820hw.aspx)


Julien.
Messages postés
489
Date d'inscription
mardi 16 novembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007

Merci [auteurdetail.aspx?ID=231472 Charles Racaud], ca n'arrondi pas exactement les bords, ca les coupe + mais ca me convient bien
C'est trés sympa de m'avoir donné un code que je n'ai plu qu'a inserer !

Merci aussi à julien de s'etre penché sur le probleme.

Bonne journée à vous.
Messages postés
489
Date d'inscription
mardi 16 novembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007

par contre, sur la source en C#, les coins sont trés bien arrondis et moi, ils sont coupés mais pas tout les coins pareils? c'est parce qu'il faut que j'affine le parametrage dans la fonction GetRoundedRectPath avec les arcs?
Messages postés
489
Date d'inscription
mardi 16 novembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007

En fait c'est bon, c'est + je met un radius elevé, + c'est beau
++
Messages postés
489
Date d'inscription
mardi 16 novembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007

par contre, un dernier truc, comment je fais pour que par exemple, il y ai les bords arrondi juste en haut, ou juste en bas, etc..