2009-01-19 10 views

Répondre

44

De quel type de byte[] voulez-vous dire? Les données de flux de fichier brutes? Dans ce cas, que diriez-vous 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 un 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); 
    } 
+0

Le second était exactement ce que je cherchais. J'écris cependant dans un autre MemoryStream plutôt que dans un fichier. Merci! – Marc

3

Si c'est juste un tampon de données de pixels brutes, et non un fichier image complet (y compris les en-têtes etc., comme un JPEG), vous ne pouvez pas utiliser Image.FromStream.

Je pense que ce que vous cherchez peut-être System.Drawing.Bitmap.LockBits, en retournant un System.Drawing.Imaging.ImageData; Cela permet d'accéder à la lecture et à l'écriture des pixels de l'image à l'aide d'un pointeur vers la mémoire.

-4
public static Bitmap BytesToBitmap(byte[] byteArray) 
{ 
    using (MemoryStream ms = new MemoryStream(byteArray)) 
    { 
    Bitmap img = (Bitmap)Image.FromStream(ms); 
    return img; 
    } 
} 
+0

c'est un bitmap. il veut un jpeg. – AnthonyBlake

+0

Correct, le code n'est pas complet. Mais il renvoie un bitmap, que vous pouvez enregistrer plus tard dans un fichier dans n'importe quel format .... Je suppose que c'est ma bienvenue dans les Reputation Wars ... Ma faute quand même. –

+0

@ juanjo.arana mais vous n'avez pas donné une réponse à sa question, je lui ai juste dit comment obtenir un bitmap. – gbjbaanb

Questions connexes