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

StackOverflow https://stackoverflow.com/questions/457370

  •  19-08-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

public static Bitmap BytesToBitmap(byte[] byteArray)
{
  using (MemoryStream ms = new MemoryStream(byteArray))
  {
    Bitmap img = (Bitmap)Image.FromStream(ms);
    return img;
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top