C#: Как преобразовать РАСТРОВЫЙ массив байтов в формат JPEG?

Просто делайте то, что легче читать и поддерживать. Довольно часто это самое быстрое решение.

И даже если это не самый быстрый, кого это волнует? Возможно, ваше приложение будет на 1% медленнее.

25
задан Marc 19 January 2009 в 11:50
поделиться

2 ответа

Какой 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);
    }
44
ответ дан Marc Gravell 15 October 2019 в 16:25
поделиться

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

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

3
ответ дан baretta 15 October 2019 в 16:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: