vb.net图像保存到内存流导致ArgumentNullException

时间:2013-03-28 13:25:08

标签: vb.net image memorystream argumentnullexception

在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调用。

知道我该怎么办?

非常感谢您的帮助,

此致

若埃尔

1 个答案:

答案 0 :(得分:0)

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

将文件保存到MemoryStream时,是否可以不使用标准格式(例如bmp或png)?要执行此操作,请使用类似于以下内容的替换“保存”调用:

image.Save(ms, ImageFormat.Png)