2012-02-22 33 views
5

Görüntünün bir dosya olarak kaydedileceği bir ASP.NET Web Hizmeti'ne resim göndermesi gereken bir Android Uygulaması geliştiriyorum. Bunu yapmak için birkaç yol gördüm ve bunun için gittim: görüntüyü bir bayt dizisine dönüştürün -> bayt dizisini bir dizgiye dönüştürün -> dizeyi KSOAP2'yi kullanarak web hizmetine gönderin -> Dize Alın Web hizmeti -> bir bayt dizisi dönüştürmek -> buna kaydet resim olarak:Android'den bir ASP.NET Web Hizmetine Resim Gönderme

IVtest = (ImageView)findViewById(R.id.carticon); 
BitmapDrawable drawable = (BitmapDrawable) IVtest.getDrawable(); 
    Bitmap bitmap = drawable.getBitmap(); 

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 
    byte[] data = baos.toByteArray(); 
    ImageView image=new ImageView(this); 
    image.setImageBitmap(bmp); 
    String strBase64 = Base64.encode(data); 

Sonra web servisine strBase64 gönderin. Image returnImage = Image.FromStream(ms);

En fazla bu hatadır:

public Image ConvertToImage(byte[] image) 
{ 
    MemoryStream ms = new MemoryStream(image); 
    Image returnImage = Image.FromStream(ms); 
    return returnImage; 
} 

[WebMethod] 
public String UploadImage(String image, String name) 
{ 
    byte[] image_byte = Encoding.Unicode.GetBytes(image); 
    Image convertedImage = ConvertToImage(image_byte); 
    try { 
     convertedImage.Save(Server.MapPath("generated_image.jpg"),  System.Drawing.Imaging.ImageFormat.Jpeg); 
    } catch (Exception e) { 
     return e.Message; 
    } 
    return "Success"; 
} 

Bu hattı bir hata alıyorum: Web service Bunu alabilir

SoapFault - faultcode: 'soap:Server' faultstring: 'System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.ArgumentException: Parameter is not valid. 
    at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData) 
    at System.Drawing.Image.FromStream(Stream stream) 
    at Service.ConvertToImage(Byte[] image) in e:\FTP\nvm\Service.asmx:line 1366 
    at Service.UploadImage(String image, String name) in e:\FTP\nvm\Service.asmx:line 1374 
    --- End of inner exception stack trace ---' faultactor: 'null' detail: [email protected] 

Teşekkür

cevap

5

Dize ile görüntüden dönüşümünüzle ilgili bir şey var gibi görünüyor. Ayrıca belleğinizi akacak olan akışınızı da atmıyorsunuz.

yerine bu deneyin:

private Image Base64ToImage(string base64String) 
    { 
     // Convert Base64 String to byte[] 
     byte[] imageBytes = Convert.FromBase64String(base64String); 
     using (var ms = new MemoryStream(imageBytes, 0, 
             imageBytes.Length)) 
     { 
      // Convert byte[] to Image 
      ms.Write(imageBytes, 0, imageBytes.Length); 
      Image image = Image.FromStream(ms, true); 
      return image; 
     } 
    } 
+0

Teşekkür iş yaptı bir sürü. Görüntü sonunda sunucuda :) – ice

İlgili konular