2016-06-22 2 views
1

Ich versuche, eine StreamImageSource in ein Byte zu machen. Mein Bild mit dem Namen "imgPicked" ist eine StreamImageSource, wenn ich es im Protokoll ausführe. Ich möchte das in ein Byte umwandeln, aber ich bin mir nicht sicher, wie Sie es tun.Wie mache ich eine StreamImageSource in ein Byte []?

Dies ist der Code, den ich habe:

private async void btnPickPicture_Clicked (object sender, EventArgs e) 
{ 
    await cameraOps.SelectPicture(); 
    var file = await cameraOps.SelectPicture(); 
    imgPicked.Source = ImageSource.FromStream(() => file.Source); 

    System.Diagnostics.Debug.WriteLine (imgPicked.Source); 
    //imgPicked is an StreamImageSource 

} 

Wie schalte ich meinen StreamImageSource (imgPicked) in ein byte []?

Das ist, was ich bisher nach googeln haben:

byte[] data = File.ReadAll(imgPicked.Source); 

Aber ich finde nicht, „File“. Vermisse ich eine Assembly oder hat der Autor nicht erwähnt, woraus "File" erbt (siehe Link): Is there a cross-platform solution to ImageSource to byte[]?

+0

'StreamImageSource' von' IImageProvider2' erbt .., die eine \t 'CreateImageWorker' für die Verarbeitung zur Verfügung stehen .. Was haben Sie versucht? REF: https://msdn.microsoft.com/en-us/library/lumia.imaging.streamimagesource.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 BTW Ich bin nicht witzig Ich kenne die Antwort gerade nicht. – Pogrindis

+0

Ich habe das so weit: 'byte [] data = File.ReadAll (imgPicked.Source);' nach ein bisschen Googeln, aber ich kann nicht "Datei" finden. Dies ist der Beitrag, den ich verfolgt habe: http://stackoverflow.com/questions/27532462/is-there-a-cross-platform-solution-to-imagesource-to-byte – medvedo

+0

Mögliches Duplikat von [Wie ImageSource konvertieren Byte-Array?] (https://stackoverflow.com/questions/26814426/how-to-convert-imagesource-to-byte-array) –

Antwort

0

Sie nicht. Sie können eine StreamImageSource nicht in ein Byte [] konvertieren. Sie können den Quelldatenstrom verwenden, um ein Byte [] mit dem Code zu erstellen, den Sie zuvor erhalten haben.

await cameraOps.SelectPicture(); 
var file = await cameraOps.SelectPicture(); 

// use the file.Source stream to create a StreamImageSource 
imgPicked.Source = ImageSource.FromStream(() => file.Source); 

// use the file.Source stream to create a byte[] 
byte[] imgData = ReadStream(file.Source); 

public byte[] ReadStream(Stream input) 
    { 
     byte[] buffer = new byte[16*1024]; 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      int read; 
      while ((read = input.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       ms.Write(buffer, 0, read); 
      } 
      return ms.ToArray(); 
     } 

    } 
+0

Es funktioniert. Wow, wenn ich jetzt das Byte an meine DB sende. Xamarin beginnt wie ein Verrückter zu wackeln. Ist es, weil es versucht, das Bild hochzuladen? – medvedo

+0

Ja, es wird eine potenziell große Datei hochgeladen. Passen Sie entweder die Größe des Bildes an oder führen Sie den Upload auf einem Thread durch (vorzugsweise beides) – Jason

+0

Ok! Ändere ich die Größe im Viewmodel oder auf der Contentseite, an die ich es sende? – medvedo