縮放帶有圓角的UserControl 時出現視覺偽影
問題:
帶有圓角的UserControl角落和彩色邊框在縮放時會出現視覺偽影。縮小時一側邊框不可見,放大時同一側出現多個邊框。
解決方案:
不要直接繪製 Region,而是應用縮放和平移變換以將繪製區域在控制項的區域內稍微向內移動。這可以確保邊框的抗鋸齒像素位於區域內,從而保留抗鋸齒效果。
實作:
在 OnPaint 事件中:
示例:
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); } // ... }
結果:
此方法消除了視覺偽影並提供無縫且具有視覺吸引力的縮放效果。
以上是為什麼縮放使用者控制項上的圓角會出現視覺偽影,如何解決?的詳細內容。更多資訊請關注PHP中文網其他相關文章!