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 に答える