Просто делайте то, что легче читать и поддерживать. Довольно часто это самое быстрое решение.
И даже если это не самый быстрый, кого это волнует? Возможно, ваше приложение будет на 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);
}
Если это просто буфер исходных данных пикселей, а не полный файл изображения (включая заголовки и т. Д., Например, JPEG), то вы не можете использовать Image.FromStream.
Я думаю, что вы можете искать System.Drawing.Bitmap.LockBits, возвращая System.Drawing.Imaging.ImageData; это обеспечивает доступ к чтению и записи пикселей изображения с использованием указателя на память.