c# windows-phone-8.1

Cómo convertir una imagen a matriz de bytes en Windows Phone 8.1 usando c#



windows-phone-8.1 (3)

Estoy usando este código

MemoryStream ms = new MemoryStream(); WriteableBitmap wb = new WriteableBitmap(myimage); wb.SaveJpeg(ms, myimage.PixelWidth, myimage.PixelHeight, 0, 100); byte [] imageBytes = ms.ToArray();

desde Convertir imagen a matriz de bytes en Windows Phone 7 No System.Drawing Dll de otra manera? pero WriteableBitmap no contiene el método SaveJpeg en el entorno de Windows phone 8.1.



En Windows Phone 8.1, las aplicaciones de Silverlight funcionan bien, supongo que myImage es una BitmapImage . Lo único que debe hacer es esperar a que BitmapImage cargue por completo:

using System.IO; using System.Windows.Media.Imaging; ... myImage = new BitmapImage(new Uri("http://i.stack.imgur.com/830Ke.jpg?s=128&g=1", UriKind.Absolute)); myImage.CreateOptions = BitmapCreateOptions.None; myImage.ImageOpened += myImage_ImageOpened; ... void myImage_ImageOpened(object sender, RoutedEventArgs e) { MemoryStream ms = new MemoryStream(); WriteableBitmap wb = new WriteableBitmap(myImage); wb.SaveJpeg(ms, myImage.PixelWidth, myImage.PixelHeight, 0, 100); byte[] imageBytes = ms.ToArray(); }

Acabo de probar ese código y funciona perfectamente en WP8.1.

Pero como comentó en otra publicación, no puede hacer referencia a Microsoft.Phone , probablemente esté haciendo una aplicación Windows Phone 8.1 Store, en cuyo caso puede usar el siguiente código:

using Windows.UI.Xaml.Media.Imaging; using Windows.Storage.Streams; using System.Runtime.InteropServices.WindowsRuntime; ... BitmapImage bitmapImage = new BitmapImage(new Uri("http://i.stack.imgur.com/830Ke.jpg?s=128&g=1")); RandomAccessStreamReference rasr = RandomAccessStreamReference.CreateFromUri(bitmapImage.UriSource); var streamWithContent = await rasr.OpenReadAsync(); byte[] buffer = new byte[streamWithContent.Size]; await streamWithContent.ReadAsync(buffer.AsBuffer(), (uint)streamWithContent.Size, InputStreamOptions.None);


Sospecho que está apuntando a Windows Runtime Apps ya que no ha encontrado el espacio de nombres sugerido en esta respuesta (que funcionará para WP8.1 Silverlight) .

En las aplicaciones de Windows Runtime puede usar Encoder : el código de ejemplo puede verse así:

// lets assume that you have your image in WriteableBitmap yourWb using (MemoryStream ms = new MemoryStream()) { var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ms.AsRandomAccessStream()); encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, imageWidth, imageHeight, horizontalDPI, verticalDPI, yourWb.PixelBuffer.ToArray()); await encoder.FlushAsync(); }