¿Puedo obtener un byte [] de una BitmapImage en Silverlight?
-
13-09-2019 - |
Pregunta
Estoy tratando de pasar alguna representación de una imagen de ida y vuelta entre Silverlight y un servicio WCF. Si es posible me gustaría pasar una System.Windows.Media.Imaging.BitmapImage
, ya que eso significaría que el cliente no tiene que realizar ninguna conversión.
Sin embargo, en algún momento necesito para almacenar esta imagen en una base de datos, es decir, la representación de la imagen debe ser capaz de convertir desde y hacia byte[]
. Puedo crear una BitmapImage
de un byte[]
mediante la lectura de la matriz en un MemoryStream
y el uso de BitmapImage.SetSource()
. Pero me parece que no puede encontrar una manera de convertir a la inversa - de BitmapImage
a byte[]
. Me estoy perdiendo algo obvio aquí?
Si ayuda en absoluto, el código de conversión podría ejecutar en el servidor, es decir, que no necesita ser Silverlight de seguridad.
Solución
Utilice esta:
public byte[] GetBytes(BitmapImage bi)
{
WriteableBitmap wbm = new WriteableBitmap(bi);
return wbm.ToByteArray();
}
Donde
public static byte[] ToByteArray(this WriteableBitmap bmp)
{
// Init buffer
int w = bmp.PixelWidth;
int h = bmp.PixelHeight;
int[] p = bmp.Pixels;
int len = p.Length;
byte[] result = new byte[4 * w * h];
// Copy pixels to buffer
for (int i = 0, j = 0; i < len; i++, j += 4)
{
int color = p[i];
result[j + 0] = (byte)(color >> 24); // A
result[j + 1] = (byte)(color >> 16); // R
result[j + 2] = (byte)(color >> 8); // G
result[j + 3] = (byte)(color); // B
}
return result;
}
Otros consejos
Yo tenía el mismo problema. He encontrado el biblioteca que hace thte trabajo de manera más fácil.
Obtener la biblioteca y hacer referencia a ella y después
using (var writingStream = new MemoryStream())
{
var encoder = new PngEncoder
{
IsWritingUncompressed = false
};
encoder.Encode(bitmapImageInstance, writingStream);
// do something with the array
}
Trate de usar copyPixels . Puede copiar los datos de mapa de bits a una matriz de bytes. Sin embargo, no estoy seguro de lo que honestamente el formato de los píxeles sería ... su probablemente depende del tipo de imagen que se cargó originalmente.