Pregunta

¿Cómo puedo convertir un BITMAP en formato de matriz de bytes a formato JPEG usando .net 2.0?

¿Fue útil?

Solución

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

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

O use FromStream con un nuevo MemoryStream (arr) si realmente tiene un byte [] :

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

Otros consejos

Si es solo un búfer de datos de píxeles sin procesar, y no un archivo de imagen completo (incluidos encabezados, etc., como un JPEG), entonces no puede usar Image.FromStream.

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

public static Bitmap BytesToBitmap(byte[] byteArray)
{
  using (MemoryStream ms = new MemoryStream(byteArray))
  {
    Bitmap img = (Bitmap)Image.FromStream(ms);
    return img;
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top