둥근 모서리가 있는 UserControl을 확대/축소할 때 시각적 아티팩트 제거
둥근 모서리가 있는 UserControl을 확대/축소하면 사라지거나 사라지는 등의 시각적 아티팩트가 발생할 수 있습니다. 왜곡된 국경. 이 문제는 그리기 가능 영역을 정의하는 컨트롤의 영역이 확대/축소 작업 중에 제대로 업데이트되지 않을 때 발생합니다.
해결책:
이 문제를 해결하려면 구현을 고려하세요. 다음 접근 방식:
컨트롤 영역에 배율을 적용하고 행렬을 변환합니다. 이렇게 하면 영역의 경계가 효과적으로 축소되어 테두리가 그려질 때 영역 내에 속하고 적절하게 앤티앨리어싱됩니다.
UserControl의 배경색을 투명으로 설정합니다. 이를 통해 컨트롤의 내용을 상위 컨테이너에 직접 그릴 수 있습니다.
향상된 컨트롤 구현:
위 솔루션을 통합한 UserControl 코드의 향상된 버전은 다음과 같습니다.
using System.Drawing; using System.Drawing.Drawing2D; public class RoundControl : UserControl { private GraphicsPath GraphicsPathWithBorder; private float MyBaseWidth; private float m_PenSize = 2f; private Color m_BorderColor = Color.Yellow; private Color m_FillColor = Color.Green; public RoundControl() { ResizeRedraw = true; InitializeComponent(); MyBaseWidth = Width; BackColor = Color.Transparent; } // ... (other properties and methods) 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); } // ... (other methods) }
이러한 변경 사항을 구현하면 UserControl의 둥근 모서리가 시각적으로 유지되도록 할 수 있습니다. 확대/축소 작업 중에 일관되고 아티팩트가 없습니다.
위 내용은 둥근 모서리가 있는 UserControl을 확대/축소할 때 시각적 아티팩트를 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!