【发布时间】:2020-04-13 15:34:48
【问题描述】:
我想将图片框中的图像导出到硬盘中的某个位置,此图像是从 MSSQL 数据库表中的图像类型列中设置为图片框的。
我已经编写了以下代码来完成这项任务。但是我通过 try catch 代码得到一个通用的 GDI+ 错误。
此代码将图片框中的图像导出到保存文件对话框指定的位置。
Dim fileName As String = exportDialog.FileName
Dim expImage As Image = picBox.BackgroundImage
Try
If expImage IsNot Nothing Then
expImage.Save(fileName)
MessageBox.Show("File exported successfully")
End If
Catch ex As Exception
__WRITELOG(ex)
End Try
这是从数据库中获取图像并将其转换为能够显示在图片框中的代码
If Not IsDBNull(img) Then
Using mStream As New MemoryStream(img, 0, img.Length)
mStream.Write(img, 0, img.Length)
__IMAGE_FROM_STREAM = Image.FromStream(mStream, True)
'//This __IMAGE_FROM_STREAM is set as the image into the picturebox & it works....!
End Using
End If
我已经检查过这个问题,但是大多数其他人在保存从磁盘中的某个位置而不是数据库中加载到图片框的文件时都遇到了 GDI+ 错误。还有一些解决方案是关于不适用于这种情况的磁盘锁。感谢您提供任何支持/建议。
【问题讨论】:
-
要么将图像的数据直接从数据库复制到磁盘,要么分配一个
.Clone(一个新实例)。picBox.BackgroundImage = Image.FromStream(mStream).Clone -
__IMAGE_FROM_STREAM = Image.FromStream(new MemoryStream(img), True)。不要用Using声明声明MemoryStream。在设置另一个图像之前处置图像(例如,PictureBox1?.Image.Dispose() PictureBox1.Image = [new Image])。当 Image 被释放时,底层流被释放。保存图像时,指定ImageFormat。 -
@Jimi 是什么?在您的代码中,您提到了 PictureBox1?.Image.Dispose()。我不习惯?符号,我是否遗漏了什么,这是一个有效的语法。谢谢
-
嗯,这就是 Elvis(空条件运算符)。它在访问成员之前执行
null测试。所以,如果PictureBox.Image对象是null(Nothing),它不会尝试调用Dispose()。如果图像是null(从未分配或设置为null),它不会抛出异常。在这种情况下,它是If PictureBox.Image IsNot Nothing then PictureBox.Image.Dispose()的快捷方式 -
@Jimi 感谢您的澄清,它在 Visual Studio 代码编辑器中显示为错误语法。
标签: vb.net visual-studio gdi+