代码之家  ›  专栏  ›  技术社区  ›  tmighty

保持MemoryStream打开或克隆映像

  •  0
  • tmighty  · 技术社区  · 7 年前

    我正在从数据库中读取图像。 我读取一个字段的二进制/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
    

    我不能使用“使用nImageStream作为新内存流(ByteArr)”,因为一段时间后图像会“死”。 根据文档,MemoryStream需要在图像的生命周期内保持打开状态。

    我应该不在乎MemoryStream,只接受它在那里并且仍然在“后台”打开,还是应该克隆图像并关闭MemoryStream?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Idle_Mind    7 年前

    根据 JonSkeet in this question ,您不需要担心保留一份推荐信。

    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