2

在 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

问题是我在指令上得到一个 ArgumentNullException image.Save(ms, image.rawFormat)

这是异常的详细信息:

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)

问题是,当我查看堆栈跟踪时,最后一次使用 3 个参数(崩溃的那个)调用 Image.Save 甚至不是由我进行的,而是由之前的 Image.Save 调用进行的。

知道我该怎么做吗?

非常感谢您的帮助,

问候,

乔尔

4

1 回答 1

1

根据Image.Save 方法的社区内容,某些图像格式没有关联的编码器,并且由于您报告的错误而失败。

将文件保存到 MemoryStream 时不能使用标准格式(例如 bmp 或 png)吗?为此,请使用类似于以下内容的方法替换对 Save 的调用:

image.Save(ms, ImageFormat.Png)
于 2013-04-02T15:31:38.757 回答