C #: ¿Cómo convertir la matriz de bytes BITMAP al formato JPEG?
Pregunta
¿Cómo puedo convertir un BITMAP en formato de matriz de bytes a formato JPEG usando .net 2.0?
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;
}
}