10
votes

Comment créer une image avec des coins arrondis en C #?

J'aimerais créer une image (d'une autre) avec des coins arrondis avec GDI +. Quelle est la meilleure façon de faire cela?

PS: Ce n'est pas pour le Web, je ne peux donc pas utiliser le client CSS


0 commentaires

5 Réponses :


5
votes

La voie la plus simple serait d'utiliser un masque évolutif avec des coins arrondis. Appliquez le masque à l'image et exporter la nouvelle image.

ici est un article de codeProject traitant de ce fait précisément cela.


0 commentaires

23
votes

Cette fonction semble faire ce que vous voulez. Il peut également être facilement modifié pour renvoyer un bitmap si nécessaire. Vous aurez également besoin de nettoyer toutes les images que vous ne voulez plus, etc. Adapté de: http://www.jigar.net/howdiodi/viewhtmlcontent98.aspx XXX


3 commentaires

Existe-t-il un moyen de lisser encore plus les bords. Comparez # 5 & N ° 6 dans cette image danbystrom.files.wordpress.com/2008 /08/fluffsample.jpg


Peut-être essayez peut-être de changer le mode de lissage dans la méthode vers SMOODINGMODE.HIGHIGHIGHIER ?


Merci. J'ai pu modifier cela pour écrire une méthode qui recadrera une image dans un cercle: Stackoverflow.com/a/57223769/1202807



9
votes

Utilisation de la méthode graphique.setClip () est le meilleur moyen. Par exemple: xxx


2 commentaires

Cela crée littéralement une image sous la forme d'un ovale ou d'un cercle. Bon de savoir comment cela peut être fait, mais pas ce que les gens veulent généralement dire par des "coins arrondis". Aucun réglage du rayon de coin en utilisant cette méthode.


Allez, utilisez votre imagination pour les raisons de Pete. Vous pouvez faire n'importe quelle forme que vous souhaitez avec un groupe graphique en combinant des arcs, des lignes, des polygones et des Béziers.



2
votes

Toutes les autres réponses souffrent d'un problème avec une distorsion de 1 pixels le long de la bordure gauche et supérieure. Ce code fixe le problème en compensant -1 pixels dans la gauche et en haut lors de l'ajout des arcs pour le masque.

public static Image RoundCorners(Image StartImage, int CornerRadius, Color BackgroundColor)
{
    CornerRadius *= 2;
    Bitmap RoundedImage = new Bitmap(StartImage.Width, StartImage.Height);

    using(Graphics g = Graphics.FromImage(RoundedImage))
    {
       g.Clear(BackgroundColor);
       g.SmoothingMode = SmoothingMode.HighQuality;
       g.CompositingQuality = CompositingQuality.HighQuality;
       g.InterpolationMode = InterpolationMode.HighQualityBicubic;

       using(Brush brush = new TextureBrush(StartImage))
       {
          using(GraphicsPath gp = new GraphicsPath())
          {
             gp.AddArc(-1, -1, CornerRadius, CornerRadius, 180, 90);
             gp.AddArc(0 + RoundedImage.Width - CornerRadius, -1, CornerRadius, CornerRadius, 270, 90);
             gp.AddArc(0 + RoundedImage.Width - CornerRadius, 0 + RoundedImage.Height - CornerRadius, CornerRadius, CornerRadius, 0, 90);
             gp.AddArc(-1, 0 + RoundedImage.Height - CornerRadius, CornerRadius, CornerRadius, 90, 90);

             g.FillPath(brush, gp);
          }
       }

       return RoundedImage;
    }
}


0 commentaires

5
votes

J'ai fini par combiner à la fois https://stackoverflow.com/a/1759073 et Httpts://stackoverflow.com/a/1759225 pour obtenir mes images arrondies, comme je voulais que l'arrière-plan soit transparent. Pensais que je le partageais: xxx


0 commentaires