Vb.net 从picturebox保存图像
使用此代码从PictureBox保存图像。 通过保存文件并为其添加名称 我面临的问题是,当调整图像时,会出现以下错误:-gdi中出现一般错误+ 我的代码Vb.net 从picturebox保存图像,vb.net,Vb.net,使用此代码从PictureBox保存图像。 通过保存文件并为其添加名称 我面临的问题是,当调整图像时,会出现以下错误:-gdi中出现一般错误+ 我的代码 show image Using fs As New System.IO.FileStream("path", IO.FileMode.Open, IO.FileAccess.Read) PIC_PARTA.Image = System.Drawing.Image.FromStream(fs) End Using 在
show image
Using fs As New System.IO.FileStream("path", IO.FileMode.Open, IO.FileAccess.Read) PIC_PARTA.Image = System.Drawing.Image.FromStream(fs) End Using
在这个阶段,这不是一个完整的答案,但它包含了大量的代码,所以我将作为答案发布,然后根据需要更新或删除 我刚刚尝试了这段代码,四次保存都成功了,尽管我认为有些可能没有:
Imports System.IO
公开课表格1
Private ReadOnly folderPath为String=Path.Combine(My.Computer.FileSystem.SpecialDirectories.MyPictures,“测试”)
私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
PictureBox1.Image=Image.FromFile(Path.Combine(folderPath,“Picture1.png”))
使用fs=File.OpenRead(Path.Combine(folderPath,“Picture2.png”))
PictureBox2.Image=Image.FromStream(fs)
终端使用
PictureBox3.ImageLocation=Path.Combine(folderPath,“Picture3.png”)
PictureBox4.Load(Path.Combine(folderPath,“Picture4.png”))
端接头
私有子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击
尝试
PictureBox1.Image.Save(Path.Combine(folderPath,“Output1.png”))
特例
Show(例如ToString())
结束尝试
端接头
私有子按钮2\u单击(发送者作为对象,e作为事件参数)处理按钮2。单击
尝试
PictureBox2.Image.Save(Path.Combine(folderPath,“Output2.png”))
特例
Show(例如ToString())
结束尝试
端接头
私有子按钮3\u单击(发送者作为对象,e作为事件参数)处理按钮3。单击
尝试
PictureBox3.Image.Save(Path.Combine(folderPath,“Output3.png”))
特例
Show(例如ToString())
结束尝试
端接头
私有子按钮4\u单击(发送者作为对象,e作为事件参数)处理按钮4。单击
尝试
PictureBox4.Image.Save(Path.Combine(folderPath,“Output4.png”))
特例
Show(例如ToString())
结束尝试
端接头
末级
你能用你自己的文件夹里的图片测试一下吗,看看你能不能得到同样的结果
请注意,Image.FromFile
选项将锁定文件,直到您处理图像
。我以前见过这样的例子:试图保存使用Image创建的Image
。FromStream
会生成您提到的错误消息,因为它以后无法再次访问该流Image.FromFile
避免了这一点,但也有其自身的缺点
直接使用
FileStream
的代码比您的代码更简单,因此效果更好,但设置ImageLocation
或调用Load
也更简单,因此效果更好。我建议您使用这两个选项中的一个,看看您是否仍然存在问题。1。仅当SaveFileDialog.ShowDialog()==DialogResult.OK
时,才应保存图像。2.您需要验证PIC\u PARTA.Image
是否为有效的Bitmap
对象。3.在调用Dispose
之前,您没有重新分配pic
,因此您实际上是在处理PictureBox中的当前图像,而您不应该这样做。4.您不应该直接调用.Dispose
,而是使用块。5.添加一个Try/Catch
块来优雅地处理错误。这一切都是我做的。问题是图像文件正在运行“问题是图像文件正在运行”是什么意思?我正在从数据库获取图像路径并将图像导入图像框。我想用相同的文件和名称修改图像,就像在图像文件上重新写入一样。这是必需的,因此会出现错误。不要在注释中发布代码。格式化后很难阅读,但你的就不是了。即使不是代码,也不应该有人阅读注释来理解问题。所有与问题相关的信息都应该在问题中,因此请编辑它以包含这些信息。
save image
Dim pic As Image
pic = PIC_PARTA.Image
Dim Savefild As New SaveFileDialog
Savefild.FileName = TEXT_NAMEIMG.Text & ".PNG"
Savefild.ShowDialog()
pic.Save(Savefild.FileName, System.Drawing.Imaging.ImageFormat.Png)
LAB_path.Text = Savefild.FileName
Savefild.Dispose()
pic.Dispose()