保持MemoryStream打开或克隆图像

时间:2017-07-17 14:41:15

标签: vb.net image bitmap memorystream

我正在从数据库中读取图像。 我读取字段的二进制/ blob,然后将其转换为如下图像:

Public Function BytesToImage(ByVal ByteArr() As Byte) As Image

    If ByteArr.Length < 1 Then
        Return Nothing
    End If

    Dim ImageStream As MemoryStream  'Needs to stay open for the image's life-time

    Dim nImage As Image = Nothing

    Try
        ImageStream = New MemoryStream(ByteArr)
        nImage = Image.FromStream(ImageStream, True)
    Catch ex As Exception
        nImage = Nothing
    End Try

    Return nImage

End Function

我无法使用&#34;使用nImageStream作为新的MemoryStream(ByteArr)&#34;因为图像已经死了#34;一段时间后。 根据文档,MemoryStream需要保持开放状态以保证图像的生命周期。

现在我想知道什么是最好的。 我不应该关心MemoryStream并且只是接受它并且仍然在后台打开&#34;或者我应该克隆图像并关闭内存流吗?

1 个答案:

答案 0 :(得分:1)

根据JonSkeet in this question,您不必担心保留参考资料。

由于您的代码中已经有Try / Catch,因此请将其归结为:

Public Function BytesToImage(ByVal ByteArr() As Byte) As Image
    Try
        Return Image.FromStream(New MemoryStream(ByteArr), True)
    Catch ex As Exception
        Return Nothing
    End Try
End Function