在VB.NET中,我有以下功能,可以让我为尚未保存到文件的图像计算哈希值:
Public Function pictureHash(ByVal image As System.Drawing.Image) As String
Try
If image Is Nothing Then Return Nothing
Dim ha As HashAlgorithm = HashAlgorithm.Create()
Dim ms As New MemoryStream()
image.Save(ms, image.RawFormat)
ms.Position = 0
Dim imageHash As Byte() = ha.ComputeHash(ms)
ms.Close()
Return BitConverter.ToString(imageHash)
Catch ex As Exception
Return Nothing
End Try
End Function
问题是我在指令image.Save(ms, image.rawFormat)
上得到了ArgumentNullException。
以下是例外的详细信息:
System.ArgumentNullException occurred
Message="Value cannot be null. Parameter name: encoder"
ParamName="encoder"
Source="System.Drawing"
StackTrace:
at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
at System.Drawing.Image.Save(Stream stream, ImageFormat format)
at MyProgram.pictureHash(Image image)
问题是,当我查看堆栈跟踪时,最后一次调用Image.Save有3个参数(崩溃的那个)甚至不是由我做的,而是由之前的Image.Save调用。
知道我该怎么办?
非常感谢您的帮助,
此致
若埃尔
答案 0 :(得分:0)
根据Image.Save method的社区内容,某些图片格式没有关联的编码器,并且因您报告的错误而失败。
将文件保存到MemoryStream时,是否可以不使用标准格式(例如bmp或png)?要执行此操作,请使用类似于以下内容的替换“保存”调用:
image.Save(ms, ImageFormat.Png)