web-dev-qa-db-ja.com

ピクチャーボックスC#の丸みを帯びたエッジ

ピクチャーボックスコントロールでエッジを丸める方法。楕円のような角度を取得したいのですが、その方法がわかりません。私はC#を使用しています。ありがとう!

12
Kracken

はい、問題ありません。Regionプロパティを使用して、コントロールに任意の形状を与えることができます。プロジェクトに新しいクラスを追加し、以下に示すコードを貼り付けます。コンパイル。ツールボックスの上部からフォームに新しいコントロールをドロップします。

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

class OvalPictureBox : PictureBox {
    public OvalPictureBox() {
        this.BackColor = Color.DarkGray;
    }
    protected override void OnResize(EventArgs e) {
        base.OnResize(e);
        using (var gp = new GraphicsPath()) {
            gp.AddEllipse(new Rectangle(0, 0, this.Width-1, this.Height-1));
            this.Region = new Region(gp);
        }
    }
}
13
Hans Passant

フォームに1つの画像ボックスを配置し、このコードを記述します。また、幅と高さの横にあるマイナスの数値を変更して、最良の結果を得ることができます。

 System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
            gp.AddEllipse(0, 0, pictureBox1.Width - 3, pictureBox1.Height - 3);
            Region rg = new Region(gp);
            pictureBox1.Region = rg;

enter image description here

15
Moory Pc

ラウンドエッジラウンドコーナーのように?

もしそうなら、チェックアウト http://social.msdn.Microsoft.com/forums/en-US/winforms/thread/603084bb-1aae-45d1-84ae-8544386d58fd

Rectangle r = new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height);
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
int d = 50;
gp.AddArc(r.X, r.Y, d, d, 180, 90);
gp.AddArc(r.X + r.Width - d, r.Y, d, d, 270, 90);
gp.AddArc(r.X + r.Width - d, r.Y + r.Height - d, d, d, 0, 90);
gp.AddArc(r.X, r.Y + r.Height - d, d, d, 90, 90);
pictureBox1.Region = new Region(gp);
9
Gage

ありがとう、ハンス。しかし、私は滑らかな外観も必要です。私はこのテーマについていくつかの調査を行いましたが、解決策を見つけることができませんでした。それから私はそれを自分でやろうとしました、そして以下の解決策を見つけました。多分誰か他の人がそれを必要としています。

protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        using (GraphicsPath gp = new GraphicsPath())
        {
            gp.AddEllipse(0, 0, this.Width - 1, this.Height - 1);
            Region = new Region(gp);
            e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
            e.Graphics.DrawEllipse(new Pen(new SolidBrush(this.BackColor), 1), 0, 0, this.Width - 1, this.Height - 1);
        }
    }
1
Emre