ホームページ > バックエンド開発 > C++ > ズームされた UserControl の丸い角に視覚的なアーティファクトが表示されるのはなぜですか?また、それらはどのように解決できますか?

ズームされた UserControl の丸い角に視覚的なアーティファクトが表示されるのはなぜですか?また、それらはどのように解決できますか?

Barbara Streisand
リリース: 2025-01-06 04:34:38
オリジナル
604 人が閲覧しました

Why Do Rounded Corners on a Zoomed UserControl Exhibit Visual Artifacts, and How Can They Be Resolved?

角が丸い UserControl をズームすると視覚的にアーティファクトが発生する

問題:

角が丸い UserControlズームすると、角と色付きの境界線に視覚的なアーティファクトが表示されます。ズームアウトすると片側の境界線が非表示になり、ズームインすると同じ側に複数の境界線が表示されます。

解決策:

領域を直接ペイントする代わりに、スケール変換と移動変換を使用して、ペイントされた領域をコントロールの領域内でわずかに内側に移動します。これにより、境界線のアンチエイリアス処理されたピクセルがリージョン内に収まり、アンチエイリアス効果が維持されます。

実装:

  • ユーザー コントロールの設定色の透明性をサポートするには、BackgroundColor を Color.Transparent に変更します。
  • 作成GraphicsPathWithBorder および Regional を使用してコントロールの形状を定義します。
  • OnPaint イベント内:

    • SmoothingMode を AntiAlias に設定します。
    • スケールを計算し、値に基づいて変換します。
    • を使用して変換を適用します。マトリックス。
    • ブラシとペンをそれぞれ使用してパスを塗りつぶし、描画します。
  • 幅を更新し、幅を再計算することでズームを処理します。領域。

例:

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);
    }

    // ...
}
ログイン後にコピー

結果:

このアプローチでは、視覚的なアーチファクトが排除され、シームレスで視覚的に魅力的なズーム効果。

以上がズームされた UserControl の丸い角に視覚的なアーティファクトが表示されるのはなぜですか?また、それらはどのように解決できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート