Pergunta

Como posso converter um bitmap em formato de matriz de bytes para o formato JPEG usando NET 2.0?

Foi útil?

Solução

Que tipo de byte[] você quer dizer? Os dados do arquivo-stream cru? Caso em que, como sobre algo como (usando System.Drawing.dll em um aplicativo cliente):

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

Ou uso FromStream com um new MemoryStream(arr) se você realmente tem uma byte[]:

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

Outras dicas

Se é apenas um buffer de dados de pixel brutos, e não um arquivo de imagem completa (incluindo cabeçalhos etc., como um JPEG), então você não pode usar Image.FromStream.

Eu acho que você pode estar procurando System.Drawing.Bitmap.LockBits, retornando um System.Drawing.Imaging.ImageData; este fornece acesso a ler e escrever os pixels da imagem usando um ponteiro para a memória.

public static Bitmap BytesToBitmap(byte[] byteArray)
{
  using (MemoryStream ms = new MemoryStream(byteArray))
  {
    Bitmap img = (Bitmap)Image.FromStream(ms);
    return img;
  }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top