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 呼び出しによって行われたことです。
どうすればいいですか?
ご協力ありがとうございました。
よろしく、
ジョエル