Исправить размер области рисования графики - PullRequest
0 голосов
/ 26 мая 2011

Я только начинаю изучать систему GDI + для рисования линий, окружностей и т. Д. Я создал компонент (сканер), который наследует панель для рисования (не уверен, что панель или графический блок лучше).

На «Сканере» я сейчас рисую на нем круг.Компонент может быть добавлен в winform, и использование стыковки изменит размер при изменении winform.В данный момент я получаю размер компонента, чтобы вычислить размер круга, но я хочу сказать, что независимо от того, какой размер у компонента, «холст» всегда имеет ширину 300 x 300, поэтому я могу сказать,круг должен быть расположен в 25,25 с размером 250x250.

Как вы можете догадаться из названия "Сканер", я хочу нанести на него точки, но они будут рассчитаны от центра (150,150)location.

Ниже приведен код, который в основном рисует круг.

Большое спасибо за любую помощь в этом.

public partial class Scanner : Panel
{
    public Scanner() {
        InitializeComponent();
        this.DoubleBuffered = true;
    }

    protected override void OnPaint(PaintEventArgs e) {
        Graphics g = e.Graphics;
        Draw(g);
        base.OnPaint(e);
    }
    protected override void OnResize(EventArgs e) {
        Graphics g = this.CreateGraphics();
        Draw(g);
        base.OnResize(e);
    }

    private void Draw(Graphics g) {
        g.Clear(Color.Black);
        g.PageUnit = GraphicsUnit.Pixel;
        Pen green = new Pen(Color.Green);
        Font fnt = new Font("Arial", 10);
        SolidBrush sb = new SolidBrush(Color.Red);

        int pos = (this.Width < this.Height ? this.Width : this.Height) / 2;
        int size = (int)(pos * 1.9);
        pos -= ((int)size / 2);
        g.DrawEllipse(green, pos, pos, size, size);
        g.DrawString(this.Width.ToString(), fnt, sb, new Point(0, 0));
    }
}

1 Ответ

1 голос
/ 26 мая 2011

Исходя из вашего последнего комментария, я понимаю, что вы хотите сделать свой рисунок на холсте фиксированного размера и построить этот холст внутри элемента управления, такого размера, который будет соответствовать элементу управления.ниже:

public class Scanner : Panel
{
    private Image _scanner;

    public Scanner()
    {
        this.SetStyle(ControlStyles.ResizeRedraw, true);

        CreateScanner();
    }

    private void CreateScanner()
    {
        Bitmap scanner = new Bitmap(300, 300);
        Graphics g = Graphics.FromImage(scanner);

        g.DrawEllipse(Pens.Green, 25, 25, 250, 250);

        g.Dispose();
        _scanner = scanner;
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        int shortestSide = Math.Min(this.Width, this.Height);

        if (null != _scanner)
            e.Graphics.DrawImage(_scanner, 0, 0, shortestSide, shortestSide);
    }

}
...