둥근 모서리와 색상이 있는 사용자 컨트롤을 축소할 때 테두리가 있으면 테두리의 오른쪽이 보이지 않게 됩니다. 또한, 확대 시 오른쪽에 여러 개의 노란색 테두리가 나타납니다.
Form1.Designer.cs
trackBar1.Value = 100; BackColor = Color.Gray;
Form1.cs
private void trackBar1_Scroll(object sender, EventArgs e) { UserControl11.SetZoomFactor(trackBar1.Value / 100F); }
UserControl1.cs
// Properties, constructors, and event handlers omitted for brevity internal GraphicsPath GraphicsPathWithBorder; internal void SetZoomFactor(float z) { Width = (int)(MyBaseWidth * z); GraphicsPathWithBorder = RoundedCornerRectangle(ClientRectangle); Region = new Region(GraphicsPathWithBorder); }
다음으로 아티팩트를 해결하려면 다음 권장 사항이 만들어집니다.
public partial class RoundControl : UserControl { // Properties, constructors, and event handlers omitted for brevity 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); } }
업데이트된 코드 조각은 둥근 모서리가 있는 확대/축소 가능한 UserControl의 색상 테두리로 인해 발생하는 시각적 아티팩트를 성공적으로 방지합니다. 배율 및 변환 매트릭스가 적용된 수정된 영역은 모든 확대/축소 수준에서 앤티앨리어싱 테두리를 보장합니다.
위 내용은 둥근 모서리와 색상 테두리가 있는 확대/축소 가능한 UserControl에서 시각적 아티팩트를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!