簡體   English   中英

在Panel內部的PictureBox上繪圖-C#

[英]Drawing on PictureBox inside of Panel - C#

我在這里的問題是2分。

我有一個位於面板內部的畫框。 當我打開圖像時,圖片框將調整為圖像的大小,而面板保持不變。 面板上只有滾動條,可以查看整個圖像。

這有兩件事是錯誤的。

  1. 調整圖片框大小時,由於某種原因,我只能在圖片框的上一部分中繪制。 例如 圖像框默認默認為200x200。 我打開的圖像是500x400。 而且我仍然只能繪制圖像的200x200部分。

  2. 我遇到的第二個問題是,當我確實在畫框的選定部分進行繪制時,當我滾動到看不見繪畫的位置並返回時,我繪制的圖像消失了。 我知道我需要某種picturebox.invalidate() 我只是不確定如何使用它。

這是我的代碼,可以很好地了解我在做什么。

public Form1()
    {
        InitializeComponent();

        DrawArea = new Bitmap(pictureBox1.Size.Width, pictureBox1.Size.Height );
        pictureBox1.Image = DrawArea;

        objGraphics = this.pictureBox1.CreateGraphics();
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
            drawImage(e);
    }

    public void drawImage(MouseEventArgs e)
    {
        Rectangle rDraw = new Rectangle();

        if (e.Button == MouseButtons.Left)
        {
            rDraw.X = e.X;
            rDraw.Y = e.Y;
            rDraw.Width = 3;
            rDraw.Height = 3;
            objGraphics.DrawEllipse(System.Drawing.Pens.Black, rDraw);
        }
    }

    private void openToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "Image Files(*.jpg; *.bmp)|*.jpg; *.bmp";
            if (open.ShowDialog() == DialogResult.OK)
            {
                Bitmap bit = new Bitmap(open.FileName);

                pictureBox1.Size = bit.Size;
                DrawArea = bit;
                pictureBox1.Image = bit;
            }
        }
        catch (Exception)
        {
            throw new ApplicationException("Failed loading image");
        }
    }

非常感謝!

您需要繪制圖片框的Paint事件。

您(幾乎)應該永遠不要使用CreateGraphics()

暫無
暫無

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

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