Domanda

Come posso convertire un BITMAP in formato byte array in formato JPEG usando .net 2.0?

È stato utile?

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;
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top