Artefacts visuels lors du zoom d'un contrôle utilisateur avec des coins arrondis
Problème :
Un contrôle utilisateur avec des coins arrondis les coins et une bordure colorée présentent des artefacts visuels lors du zoom. La bordure devient invisible d'un côté lors d'un zoom arrière et plusieurs bordures apparaissent du même côté lors d'un zoom avant.
Solution :
Au lieu de peindre directement la région, appliquez Transformations Redimensionner et Traduire pour déplacer légèrement la zone peinte vers l'intérieur de la région du contrôle. Cela garantit que les pixels anti-aliasés de la bordure se trouvent dans la région, préservant ainsi l'effet d'anti-aliasing.
Mise en œuvre :
Dans l'événement OnPaint :
Exemple :
using System.Drawing; using System.Drawing.Drawing2D; public class RoundControl : UserControl { // ... protected override void OnPaint(PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; RectangleF rect = GraphicsPathWithBorder.GetBounds(); float scaleX = 1 - ((m_PenSize + 1) / rect.Width); float scaleY = 1 - ((m_PenSize + 1) / rect.Height); using (Pen pen = new Pen(m_BorderColor, m_PenSize)) using (Brush brush = new SolidBrush(m_FillColor)) using (Matrix mx = new Matrix(scaleX, 0, 0, scaleY, pen.Width / 2, pen.Width / 2)) { e.Graphics.Transform = mx; e.Graphics.FillPath(brush, GraphicsPathWithBorder); e.Graphics.DrawPath(pen, GraphicsPathWithBorder); } base.OnPaint(e); } // ... }
Résultat :
Cette approche élimine le visuel artefacts et fournit un effet de zoom transparent et visuellement attrayant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!