1

了解しました。長い話です。UPSの配達ダイバーが使用するデバイスと同様のソフトウェアを開発しています。配達証明(POD)を取得する方法が必要です。1つ目は署名で、2つ目はカメラで撮影した写真です。

これで、これらの画像をキャプチャしているデバイスが、それらをWebサービスに送信し、Webサービスがサーバーに保存します。デバイスは、これら2つを異なるファイルタイプ(署名用のpngと画像用のjpg)として保存しますが、Webサービスはそれらをjpgファイルとして保存します。現在、署名は機能していますが、画像は「一般的な例外が発生しましたgdi+」という例外をスローし続けます。

一方がうまく保存される理由がわかりませんが、もう一方はエラーメッセージをスローし続けます。特に、サーバー側では両方とも同じコードを使用するためです。

スタックオーバーフローを検索してみましたが、問題を解決するものが見つかりませんでした。グーグルで検索しても役に立ちませんでした。写真を保存するために何をすべきかについて誰かが何か提案がありますか?

画像を文字列に変換してWebサービスに送信できるようにするデバイスロジック。

**Picture from camera logic**
Using MS As New System.IO.MemoryStream(), BM As New Bitmap(ImagePath)
     BM.Save(MS, System.Drawing.Imaging.ImageFormat.Jpeg)
     ImageString = Convert.ToBase64String(MS.ToArray())
End Using

**Signature logic**
Using MS As New System.IO.MemoryStream(), BM As New Bitmap(ImagePath)
     BM.Save(MS, System.Drawing.Imaging.ImageFormat.png)
     ImageString = Convert.ToBase64String(MS.ToArray())
End Using

画像を文字列に戻し、jpegとして保存するWebサービスロジック。

Dim Image As Drawing.Bitmap = Nothing
Dim ByteImage As Byte()

If ImageString.IsNullOrEmpty = False Then
    ByteImage = Convert.FromBase64String(ImageString)

    Using stream As New MemoryStream(ByteImage, 0, ByteImage.Length)    
         stream.Write(ByteImage, 0, ByteImage.Length)
         Image = CType(Drawing.Bitmap.FromStream(stream, True), Drawing.Bitmap)
    End Using
    Image.Save(FileLocation,Drawing.Imaging.ImageFormat.Jpeg)
End If

そのImage.Saveは、例外をスローしているものです。

4

1 に答える 1

0

画像を携帯電話のメディアに保存してから、もう一度読んで送信したようです。そうしないでください。保存するだけで、base 64でファイル全体がエンコードされ、base64でエンコードされた文字列が送信されます。

于 2012-11-08T20:19:18.463 に答える