保持 MemoryStream 打开或克隆图像
Keeping MemoryStream open or clone image
我正在从数据库中读取图像。
我读取了一个字段的二进制/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
我无法使用 "Using nImageStream As New MemoryStream(ByteArr)",因为图像会在一段时间后变为 "dead"。
根据文档,MemoryStream 需要在图像的生命周期内保持打开状态。
现在我想知道实际上什么是最好的。
我是应该不关心 MemoryStream 而只是接受它在那里并且仍然打开 "in the background",还是我应该克隆图像并关闭 memorystream?
根据 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
我正在从数据库中读取图像。 我读取了一个字段的二进制/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
我无法使用 "Using nImageStream As New MemoryStream(ByteArr)",因为图像会在一段时间后变为 "dead"。 根据文档,MemoryStream 需要在图像的生命周期内保持打开状态。
现在我想知道实际上什么是最好的。 我是应该不关心 MemoryStream 而只是接受它在那里并且仍然打开 "in the background",还是我应该克隆图像并关闭 memorystream?
根据 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