①以文件流的方式去读取图片,读取出的图片可进行修改:
Public Function readImageFileByFileStream(ByVal filePath As String) As Image Using reader As New System.IO.FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read) Return System.Drawing.Image.FromStream(reader) End Using End Function
先将bitmap转为byte(),再将byte()转为image
Dim bgrImage_bytes As Byte() = bitmapToGifBytes(DirectCast(bgrImage, Emgu.CV.Image(Of Emgu.CV.Structure.Bgr, Byte)).Bitmap) Dim bgrImage_image As Image = System.Drawing.Image.FromStream(New MemoryStream(bgrImage_bytes)) Public Shared Function bitmapToGifBytes(ByRef bitmap) As Byte() If bitmap Is Nothing Then Return Nothing End If Dim gifImageCodecInfo As ImageCodecInfo gifImageCodecInfo = GetEncoderInfo(ImageFormat.Gif) Dim gifEncoderParameter1 As EncoderParameter Dim gifEncoderParameter2 As EncoderParameter Dim gifEncoderParameters As EncoderParameters gifEncoderParameter1 = New EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 1) gifEncoderParameter2 = New EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 0) gifEncoderParameters = New EncoderParameters(2) gifEncoderParameters.Param(0) = gifEncoderParameter1 gifEncoderParameters.Param(1) = gifEncoderParameter2 Dim ms As MemoryStream = New MemoryStream() bitmap.Save(ms, gifImageCodecInfo, gifEncoderParameters) Return ms.ToArray() End Function Public Shared Function GetEncoderInfo(ByVal format As ImageFormat) As ImageCodecInfo Dim j As Integer Dim encoders() As ImageCodecInfo encoders = ImageCodecInfo.GetImageEncoders() j = 0 While j < encoders.Length If encoders(j).FormatID = format.Guid Then Return encoders(j) End If j += 1 End While Return Nothing End Function
'因为保存到DB中时,对byte进行了压缩,所以需先解压缩为byte()再进行转换 Dim bytes As Byte() bytes = Uncompress(DirectCast(pictureImage.Bytes, Byte())) 'byte文件转换为cvImage Dim img As New Image(Of Gray, Byte)(Image.FromStream(New MemoryStream(bytes))) Dim drawingimage As Image = System.Drawing.Image.FromStream(New MemoryStream(bytes)) Function Uncompress(questionImage) As Byte() ' Clean up memory with Using-statements. Dim decompressedBytes(Int(Val(questionImage.length.ToString)) * 2) As Byte 'Dim StreamR As StreamReader Using memory As MemoryStream = New MemoryStream(DirectCast(questionImage, Byte())) ' Create compression stream. Using gzip As GZipStream = New GZipStream(memory, CompressionMode.Decompress, True) '实现从字符串进行读取 gzip.Read(decompressedBytes, 0, decompressedBytes.Length) 'StreamR = New StreamReader(gzip, Encoding.Default) 'string str = streamR.ReadToEnd(); End Using Return decompressedBytes.ToArray() End Using End Function
④bitmap转byte()
Public Function bitmapToGifBytes(ByRef bitmap) As Byte() If bitmap Is Nothing Then Return Nothing End If Dim gifImageCodecInfo As ImageCodecInfo gifImageCodecInfo = GetEncoderInfo(ImageFormat.Gif) Dim gifEncoderParameter1 As EncoderParameter Dim gifEncoderParameter2 As EncoderParameter Dim gifEncoderParameters As EncoderParameters gifEncoderParameter1 = New EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 1) gifEncoderParameter2 = New EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 0) gifEncoderParameters = New EncoderParameters(2) gifEncoderParameters.Param(0) = gifEncoderParameter1 gifEncoderParameters.Param(1) = gifEncoderParameter2 Dim ms As MemoryStream = New MemoryStream() bitmap.Save(ms, gifImageCodecInfo, gifEncoderParameters) Return ms.ToArray() End Function Public Shared Function GetEncoderInfo(ByVal format As ImageFormat) As ImageCodecInfo Dim j As Integer Dim encoders() As ImageCodecInfo encoders = ImageCodecInfo.GetImageEncoders() j = 0 While j < encoders.Length If encoders(j).FormatID = format.Guid Then Return encoders(j) End If j += 1 End While Return Nothing End Function
⑤byte转为Image、Bitmap、Image(Of Gray, Byte)
byte转为Image
Dim drawingimage As Image = System.Drawing.Image.FromStream(New MemoryStream(bytes))byte转为Bitmap
Dim img As Bitmap = Bitmap.FromStream(New MemoryStream(bytes))byte转为Emgu的CVImage
Dim stream As MemoryStream = New MemoryStream(bytes) Dim img As Image(Of Gray, Byte) = New Image(Of Gray, Byte)(Image.FromStream(stream))