C #: Как преобразовать байтовый массив BITMAP в формат JPEG?
Вопрос
Как я могу преобразовать 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;
}
}