簡體   English   中英

我想在圖片框C#上繪制Square

[英]I want to draw Square on picturebox C#

我想在Image上繪制Square而不是矩形,當我執行鼠標移動操作到Top,Left,Bottom,Right方向時,它的高度和寬度將以相同的長度增加。

下面是我的代碼它不顯示正方形我想要Square的確切代碼

    public Form1()
    {
        InitializeComponent();
    }

    Rectangle currRect;
    Point endPoint;
    bool isDrag;
    Point startPoint;
    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        startPoint = new Point(e.X, e.Y); //
        if (e.Button == MouseButtons.Left)
        {
            currRect = new Rectangle();
            currRect.X = startPoint.X;
            currRect.Y = startPoint.Y;
            isDrag = true;
        }
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        if (isDrag)
        {
            endPoint = new Point(e.X, e.Y);
            currRect.Width = endPoint.X - startPoint.X;
            currRect.Height = endPoint.Y - startPoint.Y;
        }
    }

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        isDrag = false;
        Graphics graphics = this.pictureBox1.CreateGraphics();
        graphics.DrawRectangle(new Pen(Brushes.Red), currRect.X, currRect.Y, currRect.Width, currRect.Height);

    }

還有一件事,當我要增加它的起點的平方大小時,或者我可以說當我在上,左,下,右方向上增加時,它的上,左共同保持穩定或恆定。

當我移動鼠標光標時,這個起點不穩定,它的起點變了,我不想這樣,請幫我弄清楚這種情況

您的代碼繪制的是矩形,而不是正方形。 如果要繪制正方形,則需要使寬度和高度相同。

如果將pictureBox1_MouseMove方法修改為此方法,則可以繪制一個長度等於寬度和高度最大值的正方形:

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (isDrag)
    {
        endPoint = new Point(e.X, e.Y);
        int maxLength = Math.Max(endPoint.X - startPoint.X, endPoint.Y - startPoint.Y);
        currRect.Width = maxLength;
        currRect.Height = maxLength;
    }
}

編輯:這是您可以用來從任何方向繪制正方形的解決方案:

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (isDrag)
    {
        endPoint = new Point(e.X, e.Y);
        currRect.X = Math.Min(startPoint.X, endPoint.X);
        currRect.Y = Math.Min(startPoint.Y, endPoint.Y);
        int maxLength = Math.Max(Math.Abs(startPoint.X - endPoint.X), Math.Abs(startPoint.Y - endPoint.Y));
        currRect.Width = maxLength;
        currRect.Height = maxLength;
    }
}

更換

graphics.DrawRectangle(new Pen(Brushes.Red), currRect.X, currRect.Y, currRect.Width, currRect.Height);

通過:

graphics.DrawRectangle(new Pen(Brushes.Red), currRect.X, currRect.Y, Math.Min(currRect.Width, currRect.Height), Math.Min(currRect.Width, currRect.Height));

其次,我看不出起點如何變化?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM