A MemoryStream peut être utile pour cela. Vous pourriez le mettre dans une méthode d'extension :
public static class ImageExtensions
{
public static byte[] ToByteArray(this Image image, ImageFormat format)
{
using(MemoryStream ms = new MemoryStream())
{
image.Save(ms, format);
return ms.ToArray();
}
}
}
Tu pourrais l'utiliser comme ça :
var image = new Bitmap(10, 10);
// Draw your image
byte[] arr = image.ToByteArray(ImageFormat.Bmp);
Je suis partiellement en désaccord avec la réponse de prestomanifto concernant l'ImageConverter. N'utilisez pas ImageConverter. Techniquement, il n'y a rien de mal à cela, mais le simple fait qu'il utilise le boxing/unboxing de l'objet m'indique qu'il s'agit d'un code provenant des vieux endroits sombres du cadre .NET et qu'il n'est pas idéal à utiliser avec le traitement d'images (c'est trop pour la conversion en byte[] au moins), surtout si l'on considère ce qui suit.
J'ai jeté un coup d'œil à la ImageConverter
utilisé par le cadre .Net, et en interne, il utilise un code presque identique à celui que j'ai fourni ci-dessus. Il crée un nouveau MemoryStream
, sauve le Bitmap
dans le format dans lequel il était lorsque vous l'avez fourni, et retourne le tableau. Il n'est pas nécessaire de créer un tableau ImageConverter
en utilisant MemoryStream