2014-03-04 86 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")))