Créer un BitmapImage à partir d'un tableau d'octets
Je suis entrain de créer un tableau d'octets, avec des valeurs arbitraires à elle et que vous voulez les convertir en un BitmapImage.
bi = new BitmapImage();
using (MemoryStream stream = new MemoryStream(data))
{
try
{
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.StreamSource = stream;
bi.DecodePixelWidth = width;
bi.EndInit();
}
catch (Exception ex)
{
return null;
}
}
Ce code me donne une NotSupportedException tout le temps.
Comment pourrais-je créer un BitmapSource partir de n'importe quel tableau d'octets?
Peut-être que vous voulez faire ceci: Comment puis-je convertir byte[] pour BitmapImage (demandé aujourd'hui). Si oui, la question est susceptible d'être fermée en double.
Que les contribué à! Merci!!!!
Que les contribué à! Merci!!!!
OriginalL'auteur tabina | 2013-03-07
Vous devez vous connecter pour publier un commentaire.
Donné un tableau d'octets, où chaque octet représente une valeur de pixel, vous pouvez créer une image bitmap en niveaux de gris comme indiqué ci-dessous. Vous devez spécifier la largeur et la hauteur de l'image, et qui doit bien sûr correspondre à la taille de la mémoire tampon.
Chaque octet de valeur peut également représenter un index dans une palette de couleurs, dans ce cas, votre devrait préciser
PixelFormats.Indexed8
et bien sûr aussi passer dans une palette de couleurs approprié.Bien sûr, je ne. Merci pour cette remarque.
J'ai élaboré dans un ici la question avec votre code. Si vous pouvez démontrer étaient mes dysfonctionnement est je me ferai un plaisir de supprimer tous ces commentaires.
Je trouve ça plus facile de passer de zéro pour
dpiX
etdpiY
. L'image résultante a exactementwidth x height
Pixels. En passant de 96 semble fonctionner très bien, mais je ne suis pas sûr si cela est garanti comportement ou si cela peut changer, par exemple, en fonction de certains paramètres du système.OriginalL'auteur Clemens
Le tableau d'octets doit contenir valide les données d'image (PNG /JPG /BMP).
Si vous enlevez le à l'aide de bloc et les données sont valides, alors votre Code devrait fonctionner. BitmapImage ne semble pas à la charge de l'image tout de suite, donc il ne peut pas le charger par la suite parce que le flux est déjà éliminés.Qu'entendez-vous par "des valeurs arbitraires"? Aléatoire des valeurs RVB? Alors je propose d'utiliser le Bitmap classe et enregistrer l'image résultante dans un Memorystream.
Si vous voulez juste pour lier un Byte[] et de Contrôle de l'Image dans votre userinterface: se Lier directement à la matrice. Il fonctionne sans convertisseur.
bi.CacheOption = BitmapCacheOption.OnLoad
va forcer le flux à lire et à permettre le flux pour être éliminés.Dans mon exemple, je veux dire un tableau d'octets qui est rempli avec des valeurs entre 0 et 255.
OriginalL'auteur doerig