Puis-je obtenir un octet [] à partir d'un BitmapImage dans Silverlight?
-
13-09-2019 - |
Question
Je suis en train de passer une représentation d'une image et-vient entre Silverlight et un service de WCF. Si possible, je voudrais passer un System.Windows.Media.Imaging.BitmapImage
, car cela signifierait que le client n'a pas à faire une conversion.
Cependant, à un moment donné, je dois stocker cette image dans une base de données, ce qui signifie la représentation de l'image doit être en mesure de convertir et de byte[]
. Je peux créer un BitmapImage
d'un byte[]
en lisant le tableau dans un MemoryStream
et en utilisant BitmapImage.SetSource()
. Mais je ne peux pas sembler trouver un moyen de convertir l'autre sens - de BitmapImage
à byte[]
. Est-ce que je manque quelque chose évidente ici?
Si elle aide à tous, le code de conversion pourrait fonctionner sur le serveur, à savoir qu'il n'a pas besoin d'être Silverlight de sécurité.
La solution
Utilisez ceci:
public byte[] GetBytes(BitmapImage bi)
{
WriteableBitmap wbm = new WriteableBitmap(bi);
return wbm.ToByteArray();
}
Où
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;
}
Autres conseils
J'ai eu le même problème. J'ai trouvé la bibliothèque qui fait thte tâche beaucoup plus facile.
Obtenir la bibliothèque et la référence, puis
using (var writingStream = new MemoryStream())
{
var encoder = new PngEncoder
{
IsWritingUncompressed = false
};
encoder.Encode(bitmapImageInstance, writingStream);
// do something with the array
}
Essayez d'utiliser CopyPixels . Vous pouvez copier les données bitmap à un tableau d'octets. Cependant, je suis franchement pas sûr de ce que le format des pixels serait ... sa dépend probablement du type d'image qui a été à l'origine chargée.