2009-01-19 19 views

Respuesta

44

¿Qué tipo de byte[] quieres decir? ¿Los datos de flujo de archivos sin formato? En cuyo caso, ¿qué tal algo así como (usando System.Drawing.dll en una aplicación cliente):

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

O utilice FromStream con un new MemoryStream(arr) si realmente tienen un byte[]:

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

El segundo fue justo lo que estaba buscando. Sin embargo, estoy escribiendo en otro MemoryStream en lugar de hacerlo en un archivo. Gracias! – Marc

3

si es sólo una el búfer de datos de píxeles en bruto, y no un archivo de imagen completo (incluidos encabezados, etc., como un JPEG), entonces no puede usar Image.FromStream.

Creo que lo que usted podría estar buscando es System.Drawing.Bitmap.LockBits, devolviendo un System.Drawing.Imaging.ImageData; esto proporciona acceso a leer y escribir los píxeles de la imagen usando un puntero a la memoria.

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

esto es un mapa de bits. él quiere un jpeg. – AnthonyBlake

+0

Correcto, el código no está completo. Pero devuelve un mapa de bits, que luego puede guardar en un archivo en cualquier formato ... Supongo que esta es mi bienvenida a las Reputation Wars ... Mi culpa de todos modos. –

+0

@ juanjo.arana pero no ha dado una respuesta a su pregunta, solo le dijo cómo obtener un mapa de bits. – gbjbaanb

Cuestiones relacionadas