web-dev-qa-db-fra.com

C #: Comment convertir Bitmap Byte Array au format JPEG?

Comment puis-je convertir un bitmap au format Array d'octet au format JPEG à l'aide de .NET 2.0?

25
Marc

Quel type de byte[] Voulez-vous dire? Les données de flux de fichiers brutes? Dans ce cas, que diriez-vous de quelque chose comme (en utilisant System.Drawing.dll Dans une application client):

    using(Image img = Image.FromFile("foo.bmp"))
    {
        img.Save("foo.jpg", ImageFormat.Jpeg);
    }

Ou utilisez FromStream avec une new MemoryStream(arr) Si vous avez vraiment un byte[]:

    byte[] raw = ...todo // File.ReadAllBytes("foo.bmp");
    using(Image img = Image.FromStream(new MemoryStream(raw)))
    {
        img.Save("foo.jpg", ImageFormat.Jpeg);
    }
44
Marc Gravell

S'il ne s'agit que d'un tampon de données de pixels brutes, et non d'un fichier image complet (y compris des en-têtes, etc., tels qu'un JPEG), vous ne pouvez pas utiliser image.fromstream.

Je pense que ce que vous recherchez est System.Drawing.Bitmap.Lockbits, retourner un système.Drawing.iming.imagedata; Cela donne accès à la lecture et à l'écriture des pixels de l'image à l'aide d'un pointeur à la mémoire.

3
baretta