Подтвердить что ты не робот

С#: Как преобразовать массив байтов BITMAP в формат JPEG?

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

4b9b3361

Ответ 1

Какой тип 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);
    }

Ответ 2

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

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

Ответ 3

public static Bitmap BytesToBitmap(byte[] byteArray)
{
  using (MemoryStream ms = new MemoryStream(byteArray))
  {
    Bitmap img = (Bitmap)Image.FromStream(ms);
    return img;
  }
}