Visuelle Artefakte beim Zoomen eines UserControl mit abgerundeten Ecken
Problem:
Ein UserControl mit abgerundeten Ecken Ecken und ein farbiger Rand weisen beim Zoomen visuelle Artefakte auf. Der Rand wird beim Verkleinern auf einer Seite unsichtbar und beim Vergrößern erscheinen mehrere Ränder auf derselben Seite.
Lösung:
Anstatt den Bereich direkt zu malen, wenden Sie ihn an Transformationen skalieren und verschieben, um den gezeichneten Bereich innerhalb der Region des Steuerelements leicht nach innen zu verschieben. Dadurch wird sichergestellt, dass die Anti-Aliasing-Pixel des Rahmens innerhalb der Region liegen und der Anti-Aliasing-Effekt erhalten bleibt.
Implementierung:
Im OnPaint-Ereignis:
Beispiel:
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); } // ... }
Ergebnis:
Dieser Ansatz eliminiert das visuelle Artefakte und sorgt für einen nahtlosen und optisch ansprechenden Zoomeffekt.
Das obige ist der detaillierte Inhalt vonWarum weisen abgerundete Ecken in einem gezoomten UserControl visuelle Artefakte auf und wie können diese behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!