首页 > 解决方案 > 将图片框图像导出到本地磁盘

问题描述

我想将图片框中的图像导出到 HDD 中的某个位置,该图像从 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+ 错误。还有一些解决方案是关于不适用于这种情况的磁盘锁。任何支持/建议表示赞赏。

标签: vb.netvisual-studiogdi+

解决方案


我不是 100% 确定,但我认为问题在于您正在处理Stream您正在创建的内容Image。使用语句通常很好,Using因为它意味着自动处理创建的对象,但在这种情况下这是不可取的。保留Stream周围,只有在你完成并处理它时才处理它Image。例如,您可以创建一个自定义控件,该控件继承PictureBox并具有源属性Stream,允许您将其与Image.

Imports System.IO

Public Class PictureBoxEx
    Inherits PictureBox

    Private _imageStream As Stream

    Public WriteOnly Property ImageStream As Stream
        Set
            _imageStream = Value
            Image = Image.FromStream(Value)
        End Set
    End Property

    Public Sub DisposeImageAndStream()
        Image?.Dispose()
        _imageStream?.Dispose()
    End Sub

End Class

推荐阅读