C #: Como converter array de bytes BITMAP para o formato JPEG?
Pergunta
Como posso converter um bitmap em formato de matriz de bytes para o formato JPEG usando NET 2.0?
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;
}
}