2016-05-23 6 views
1

Ich habe SVG Xml, die ich in ImageSource oder FileImageSource mithilfe von XamSVG-Bibliothek im PCL-Projekt meiner Xamarin.forms konvertieren kann.xamarin.forms Get Byte-Array von imagesource

Ich möchte die ImageSource/FileImageSource in Byte-Array konvertieren (um die Bitmap zu erhalten).

Ist das möglich?

+0

Beziehen Sie sich einfach https://StackOverflow.com/questions/27532462/is-there-a-Cross-platform-Lösung-to-imagesource-to-byte/27532867#27532867 –

+0

dieser Link ist nicht das, was ich brauche seit Ich benutze die Kamera nicht. alles, was ich habe, ist Bild mit imagesource, dass ich die Bitmap (Byte-Array) von ihm erhalten möchte – asaf

Antwort

2

ImageSource stellt keinen Mechanismus zum Abrufen der ursprünglichen Bildquelle bereit. Stattdessen müssen Sie einen Verweis auf die Originalquelle, die Sie zum Erstellen des Bildes verwenden, manuell beibehalten.

+0

Ich habe keine Originalquelle - ich habe Svg XML-Datei, die in Imagefile konvertiert, ich brauche das Byte-Array der Bitmap ... – asaf

+0

Sie Sie müssen sich die XamSVG-Bibliothek ansehen, um zu sehen, ob sie ein intermediäres Bitmap erzeugt, auf das Sie zugreifen können, oder um es so zu modifizieren, dass eins erzeugt wird. – Jason

1

gefunden die Lösung !!!

 StreamImageSource streamImageSource = (StreamImageSource) some image source... 
     System.Threading.CancellationToken cancellationToken = System.Threading.CancellationToken.None; 
     Task<Stream> task = streamImageSource.Stream(cancellationToken); 
     Stream stream = task.Result; 
+0

und was ist "a"? (3. Zeile) – zuckerthoben

+0

a is streamImageSource – asaf

+0

Ich habe es versucht und bekomme: "Das Objekt des Typs 'Xamarin.Forms.FileImageSource' kann nicht in den Typ 'Xamarin.Forms.StreamImageSource' umgewandelt werden." – zuckerthoben

-1

Andere Lösung:

public static byte[] ReadFully(Stream input) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      input.CopyTo(ms); 
      return ms.ToArray(); 
     } 

    } 

-Stream und Memory sind System.IO-Klasse.

verwenden Sie es dann wie folgt aus:

  byte[] TargetImageByte = ReadFully(_data.Source); 

_data.source ist Typ-Mediafile.