Rumah >pembangunan bahagian belakang >C++ >Mengapa Sudut Bulat pada UserControl yang Dizum Mempamerkan Artifak Visual, dan Bagaimana Ia Boleh Diselesaikan?
Artifak Visual Semasa Mengezum Kawalan Pengguna dengan Sudut Bulat
Masalah:
Kawalan Pengguna dengan bulat sudut dan sempadan berwarna mempamerkan artifak visual apabila dizum. Sempadan menjadi tidak kelihatan pada satu sisi semasa mengezum keluar dan berbilang sempadan muncul pada sebelah yang sama apabila mengezum masuk.
Penyelesaian:
Daripada mengecat Wilayah secara langsung, gunakan Skala dan Terjemah transformasi untuk memindahkan kawasan yang dicat ke dalam sedikit dalam Wilayah kawalan. Ini memastikan bahawa piksel anti-alias sempadan berada dalam Wilayah, mengekalkan kesan anti-aliasing.
Pelaksanaan:
Dalam acara OnPaint:
Contoh:
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); } // ... }
Hasil:
Pendekatan ini menghapuskan artifak visual dan menyediakan kesan zum yang lancar dan menarik secara visual.
Atas ialah kandungan terperinci Mengapa Sudut Bulat pada UserControl yang Dizum Mempamerkan Artifak Visual, dan Bagaimana Ia Boleh Diselesaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!