Конвертирование изображений в C#

C#   3 сентября 2012  Автор статьи:  

В данной статье я хочу рассказать про работу с изображениями. Для работы с графическими файлами часто используется абстрактный класс Image и расширяющий его класс Bitmap. Часто, при работе с ASP.NET графический файл может быть получен как поток или массив байт. В одном своем Web приложении я столкнулся с проблемой конвертирования из массива байт в Bitmap, а затем назад в массив байт. Это мне нужно было для некоторой обработки изображения, а затем возвращения его пользователю. Также хранить изображение в массиве байт в базе данных считается более правильно, чем использование других способов. Рассмотрим какие типы конвертирования мы умеем делать:

  • Из байт массива или потока в Image (Byte Array To Image)
  • Из Image в Bitmap (Данный вид конверсии поддерживается конструктором Bitmap)
  • Из Bitmap в Image (Bitmap to Image)
  • Из Image в массив байт (Image to Byte Array)

Для демонстрации работы данных конверсий приведу в пример функцию, которая будет изменять размер изображения на данный:

//конвертирует массив байт в изображение(Image)
private Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
//конвертирует Image в массив байт
private byte[] ImageToByteArray(Image img)
{
ImageConverter converter = new ImageConverter();
return (byte[])converter.ConvertTo(img, typeof(byte[]));
}
//конвертирует Bitmap в Image
private Image BitmapToImage(Bitmap map)
{
Stream imageStream = new MemoryStream();
map.Save(imageStream, ImageFormat.Png);
return Image.FromStream(imageStream);
}
public byte[] GetNormalizedImage(byte[] img, int width, int height)
{
Image tempImg = byteArrayToImage(img);
Bitmap map = new Bitmap(tempImg, width, height);
Image newImg = BitmapToImage(map);
return ImageToByteArray(newImg);
}

Как вы могли заметить, в коде очень часто применяется класс MemoryStream, который расширяет поток байт Stream. Таким образом очень легко реализовать конвертацию потока байт в Image или Bitmap.

Научиться программировать

  • на Delphi

  • на Java

  • на C++