2014-03-04 83 views
0

我有一個圖片框。用戶可以在其上繪製不同的rectangles,假設用戶繪製的rectangles超出picturebox的大小,即使圖像尚未保存,我是否可以統一調整內容以適合picturebox事先將圖像放入圖像盒而不保存圖像?

我只能管理從resize已經加載和已經保存的圖像文件的內容。我是用畫rectangles的代碼如下:

gr.FillRectangle(Brushes.Black, 0, 0, 2, 75) 

Rectangles也出現在picturebox正如所預期的。 還有我無法用下面的代碼保存:

PictureBox1.Image.Save("C:\test\myimage.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) 

,我得到的是錯誤: Object reference not set to an instance of an object.

+0

請發佈更多相關的代碼來確定錯誤的來源(我猜PictureBox1.Image.Save是在PictureBox1沒有任何圖像時寫入的)。另請詳細說明「用戶繪製超出圖片框大小的矩形」 - >用戶如何繪製矩形? – varocarbas

+0

使用容器,如面板? –

回答

0

這可能是因爲你的PictureBox的分配有沒有「形象」的對象。

你可以在這裏找到解決方案(第一個答案):getting image from a picturebox

[此外,您可以稍後與問候面臨的問題,節省您的根文件夾(C :)。嘗試使用您的本地桌面的一個文件夾,例如,以避免任何訪問權限錯誤]

編輯: 這是從上面的鏈接採取。在我看來,你還沒有嘗試過。

myPictureBox.Image = New Bitmap(myPictureBox.ClientSize.Width, _ 
           myPictureBox.ClientSize.Height) 

'Then, when you want to perform some drawing, use a Graphics object from the Image instead of the PictureBox: 

Using g As Graphics = Graphics.FromImage(myPictureBox.Image) 
    ' do the drawing ' 
End Using 
+0

我沒有得到因爲我看到同樣的事情,但是圖像清楚地是在圖片框中,因爲當我將它移動到圖像窗體上時,它仍然只顯示在圖片框中。Dim gr As Graphics gr = Me.PictureBox1.CreateGraphics gr。 FillRectangle(Brushes.Black,0,0,2,75)PictureBox1.Image.Save(「C:\ test \ myimage.jpg」,System.Drawing.Imaging.ImageFormat.Jpeg)C:\根文件夾是因爲即時通訊仍然只是測試,雖然這將與一個保存對話框後 – Argon

+0

完成您正在繪製的圖形是'圖片框',但不是'圖像'屬性的一部分。你的圖片屬性沒有設置,這就是你得到這個錯誤的原因。 你看過我發給你的鏈接了嗎? 這就是你必須做的:http://stackoverflow.com/questions/1398069/getting-image-from-a-picturebox/1398222#1398222 遵循該代碼,它應該工作。 無論您是否在測試,您在根目錄C:中保存文件的努力都可能因訪問限制而失敗,而且往往不會出現錯誤,以幫助您識別問題。 – verph

1

我使用System.IO.MemoryStream當我想用圖像填充圖片框而不保存到硬盤驅動器。

PictureBox1.Image = New System.Drawing.Bitmap(New IO.MemoryStream(New System.Net.WebClient().DownloadData("http://upload.wikimedia.org/wikipedia/commons/e/ec/Banksy.on.the.thekla.arp.jpg")))