C #: Come convertire array di byte BITMAP in formato JPEG?
Domanda
Come posso convertire un BITMAP in formato byte array in formato JPEG usando .net 2.0?
Soluzione
Che tipo di byte []
intendi? I dati grezzi del flusso di file? Nel qual caso, che ne dici di qualcosa del tipo (usando System.Drawing.dll
in un'applicazione client):
using(Image img = Image.FromFile("foo.bmp"))
{
img.Save("foo.jpg", ImageFormat.Jpeg);
}
Oppure usa FromStream
con un nuovo MemoryStream (arr)
se hai davvero un byte []
:
byte[] raw = ...todo // File.ReadAllBytes("foo.bmp");
using(Image img = Image.FromStream(new MemoryStream(raw)))
{
img.Save("foo.jpg", ImageFormat.Jpeg);
}
Altri suggerimenti
Se si tratta solo di un buffer di dati pixel non elaborati e non di un file di immagine completo (incluse intestazioni ecc., ad esempio JPEG), non è possibile utilizzare Image.FromStream.
Penso che ciò che potresti cercare sia System.Drawing.Bitmap.LockBits, che restituisce un System.Drawing.Imaging.ImageData; questo fornisce l'accesso alla lettura e alla scrittura dei pixel dell'immagine usando un puntatore alla memoria.
public static Bitmap BytesToBitmap(byte[] byteArray)
{
using (MemoryStream ms = new MemoryStream(byteArray))
{
Bitmap img = (Bitmap)Image.FromStream(ms);
return img;
}
}