2012-02-22 24 views
5

Zajmuję się tworzeniem aplikacji dla systemu Android, która powinna wysłać obraz do mojej usługi sieci Web ASP.NET, w której obraz zostanie zapisany jako plik. Widziałem kilka sposobów na zrobienie tego i poszedłem do tego: przekonwertuj obraz do tablicy bajtów -> przekonwertuj tablicę bajtów na ciąg -> wyślij ciąg do usługi sieciowej za pomocą KSOAP2 -> odbierz ciąg w Serwisie WWW -> przekonwertować go do tablicy bajtów -> zapisać go jako obraz:Wysyłanie obrazu z systemu Android do usługi sieci Web ASP.NET

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); 

Potem wysłać strBase64 do usługi internetowej. W Web Service mam to:

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"; 
} 

pojawia się błąd w tym linii: Image returnImage = Image.FromStream(ms);

Jest to błąd otrzymuję:

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] 

Dzięki

Odpowiedz

5

Wydaje się, że jest coś niepewnego przy konwersji z ciągu na obraz. Nie pozbędziesz się też strumienia, który spowoduje wyciek pamięci.

Spróbuj to zamiast:

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

Wielkie dzięki, że spełnił swoje zadanie. Obraz jest już na serwerze :) – ice

Powiązane problemy