我正在从数据库中读取图像。 我读取字段的二进制/ 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;或者我应该克隆图像并关闭内存流吗?
答案 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