1

好吧,长话短说。我正在开发类似于 UPS 送货潜水员使用的设备的软件。我们必须设法获得交货证明(POD)。第一个是签名,第二个是相机拍摄的照片。

现在,捕获这些图像的设备将它们发送到我们拥有的 Web 服务,然后将它们保存在服务器上。设备将这两种保存为不同的文件类型,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

Web 服务逻辑将图像转换回字符串,然后将其保存为 jpeg。

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 编码整个文件,发送 base 64 编码字符串。

于 2012-11-08T20:19:18.463 回答