C #: Как преобразовать байтовый массив BITMAP в формат JPEG? - PullRequest
25 голосов
/ 19 января 2009

Как я могу преобразовать BITMAP в формате байтового массива в формат JPEG, используя .net 2.0?

Ответы [ 3 ]

44 голосов
/ 19 января 2009

Какой тип byte[] вы имеете в виду? Необработанные данные файлового потока? В этом случае, как насчет чего-то вроде (используя System.Drawing.dll в клиентском приложении):

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

Или используйте FromStream с new MemoryStream(arr), если у вас действительно есть byte[]:

    byte[] raw = ...todo // File.ReadAllBytes("foo.bmp");
    using(Image img = Image.FromStream(new MemoryStream(raw)))
    {
        img.Save("foo.jpg", ImageFormat.Jpeg);
    }
3 голосов
/ 19 января 2009

Если это просто буфер необработанных данных пикселей, а не полный файл изображения (включая заголовки и т. Д., Например, JPEG), то вы не можете использовать Image.FromStream.

Я думаю, что вы могли бы искать System.Drawing.Bitmap.LockBits, возвращая System.Drawing.Imaging.ImageData; это обеспечивает доступ к чтению и записи пикселей изображения с использованием указателя на память.

0 голосов
/ 12 апреля 2012
public static Bitmap BytesToBitmap(byte[] byteArray)
{
  using (MemoryStream ms = new MemoryStream(byteArray))
  {
    Bitmap img = (Bitmap)Image.FromStream(ms);
    return img;
  }
}
...