簡體   English   中英

如何在PictureBox中保留圖像

[英]How to keep the image Drawn in PictureBox

嘿大家,這是C#.Net的新人。

我正在嘗試制作像Paint這樣的應用程序,當然要簡單得多,而且我被卡住了。

問題是這個。

在pictureBox中,我在PictureBox上繪制網格線,之后我正在讀取.map(一個Mapper3文件)並想要繪制到網格線上,但是當我繪制地圖時,網格線消失了。

我認為問題是因為PictureBox Image在我繪制地圖時變為null。 我怎么能克服這一點,有什么竅門嗎?

感謝你們從現在開始的回復,對不起我的英語不好......

我最誠摯的問候...

你使用winforms嗎? 如果是的話,你實際上不需要工作區的圖片框。 我認為更合適的是表單或面板上的Graphics類。 由於形式重繪圓圈,您丟失了線條,將您的繪圖代碼放入表單繪制處理程序,圖片將在需要時重新繪制。 在某些情況下,您可能需要手動觸發重繪圈,為此您應該使用表單的Invalidate方法。

例如,將此代碼添加到繪制處理程序:

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        // Drawing vertical lines
        for (int x = 5; x < this.ClientRectangle.Width; x+=5)
        {
            e.Graphics.DrawLine(Pens.Gray, new Point(x, 0), new Point(x, this.ClientRectangle.Height));
        }

        // Drawing horisontal lines
        for (int y = 5; y < this.ClientRectangle.Width; y += 5)
        {
            e.Graphics.DrawLine(Pens.Gray, new Point(0, y), new Point(this.ClientRectangle.Width,y));
        }
    }

您也可以通過這種方式在按鈕單擊處理程序中使用Graphics:

Graphics g = Graphics.FromHwnd(this.Handle);

g.FillEllipse(Brushes.Beige, new Rectangle(10, 10, 10, 10));

但是在這種情況下,你所繪制的所有內容都將在表單的重繪圓圈中被刪除,你將不得不在表單繪制處理程序中重復它

[編輯]好的,例如你的表單上有pictureBox1,你可以通過這種方式借助Bitmap類輕松地繪制它:

// Draw into bitmap
Bitmap bmp = new Bitmap(150, 150);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(Brushes.Green, new Rectangle(25, 75, 10, 30));

// Set bitmap into picture box
pictureBox1.Image = bmp;

在這種情況下,你不需要重繪你的畫作,圖片框會為你做。 如果您希望從圖片框下方顯示繪畫,請不要忘記將BackColor ot圖片框設置為Transparent

每當paint事件引發時,您都必須繪制包括網格線在內的所有內容,如果您關注性能,則可以檢測到剪切區域並僅繪制該部分。

祝好運。

暫無
暫無

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

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