Как преобразовать изображение в массив байтов

Может ли кто-нибудь предложить, как я могу преобразовать изображение в массив байтов и наоборот?

Если у кого-нибудь есть образцы кода, чтобы помочь мне, это было бы здорово.

Я разрабатываю приложение WPF и использую средство чтения streamов.

Пример кода для изменения изображения в массив байтов

public byte[] ImageToByteArray(System.Drawing.Image imageIn) { using (var ms = new MemoryStream()) { imageIn.Save(ms,imageIn.RawFormat); return ms.ToArray(); } } 

C # Image to Byte Array и байт-массив для Image Converter Class

Для преобразования объекта Image в byte[] вы можете сделать следующее:

 public static byte[] converterDemo(Image x) { ImageConverter _imageConverter = new ImageConverter(); byte[] xByte = (byte[])_imageConverter.ConvertTo(x, typeof(byte[])); return xByte; } 

Другой способ получить массив байтов из пути изображения

 byte[] imgdata = System.IO.File.ReadAllBytes(HttpContext.Current.Server.MapPath(path)); 

попробуй это:

 public byte[] imageToByteArray(System.Drawing.Image imageIn) { MemoryStream ms = new MemoryStream(); imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif); return ms.ToArray(); } public Image byteArrayToImage(byte[] byteArrayIn) { MemoryStream ms = new MemoryStream(byteArrayIn); Image returnImage = Image.FromStream(ms); return returnImage; } 

Вы можете использовать File.ReadAllBytes() для чтения любого файла в массив байтов. Чтобы написать массив байтов в файл, просто используйте File.WriteAllBytes() .

Надеюсь это поможет.

Здесь вы можете найти дополнительную информацию и пример кода.

Вот что я сейчас использую. Некоторые из других методов, которые я пробовал, были неоптимальными, поскольку они изменили глубину битов пикселей (24-бит или 32-разрядную) или игнорировали разрешение изображения (dpi).

  // ImageConverter object used to convert byte arrays containing JPEG or PNG file images into // Bitmap objects. This is static and only gets instantiated once. private static readonly ImageConverter _imageConverter = new ImageConverter(); 

Массив для байтов:

  ///  /// Method to "convert" an Image object into a byte array, formatted in PNG file format, which /// provides lossless compression. This can be used together with the GetImageFromByteArray() /// method to provide a kind of serialization / deserialization. ///  /// Image object, must be convertable to PNG format /// byte array image of a PNG file containing the image public static byte[] CopyImageToByteArray(Image theImage) { using (MemoryStream memoryStream = new MemoryStream()) { theImage.Save(memoryStream, ImageFormat.Png); return memoryStream.ToArray(); } } 

Байт-массив для изображения:

  ///  /// Method that uses the ImageConverter object in .Net Framework to convert a byte array, /// presumably containing a JPEG or PNG file image, into a Bitmap object, which can also be /// used as an Image object. ///  /// byte array containing JPEG or PNG file image or similar /// Bitmap object if it works, else exception is thrown public static Bitmap GetImageFromByteArray(byte[] byteArray) { Bitmap bm = (Bitmap)_imageConverter.ConvertFrom(byteArray); if (bm != null && (bm.HorizontalResolution != (int)bm.HorizontalResolution || bm.VerticalResolution != (int)bm.VerticalResolution)) { // Correct a strange glitch that has been observed in the test program when converting // from a PNG file image created by CopyImageToByteArray() - the dpi value "drifts" // slightly away from the nominal integer value bm.SetResolution((int)(bm.HorizontalResolution + 0.5f), (int)(bm.VerticalResolution + 0.5f)); } return bm; } 

Изменить: Чтобы получить изображение из файла jpg или png, вы должны прочитать файл в массив байтов, используя File.ReadAllBytes ():

  Bitmap newBitmap = GetImageFromByteArray(File.ReadAllBytes(fileName)); 

Это позволяет избежать проблем, связанных с Bitmap, которые хотят сохранить открытый stream источника, а также некоторые предлагаемые способы обхода этой проблемы, которые приводят к блокировке исходного файла.

Вам нужны только пиксели или все изображение (включая заголовки) в виде массива байтов?

Для пикселей: используйте метод CopyPixels в Bitmap. Что-то вроде:

 var bitmap = new BitmapImage(uri); //Pixel array byte[] pixels = new byte[width * height * 4]; //account for stride if necessary and whether the image is 32 bit, 16 bit etc. bitmap.CopyPixels(..size, pixels, fullStride, 0); 

Если вы не ссылаетесь на imageBytes для переноса байтов в streamе, метод ничего не вернет. Убедитесь, что вы ссылаетесь на изображениеBytes = m.ToArray ();

  public static byte[] SerializeImage() { MemoryStream m; string PicPath = pathToImage"; byte[] imageBytes; using (Image image = Image.FromFile(PicPath)) { using ( m = new MemoryStream()) { image.Save(m, image.RawFormat); imageBytes = new byte[m.Length]; //Very Important imageBytes = m.ToArray(); }//end using }//end using return imageBytes; }//SerializeImage 

Этот код извлекает первые 100 строк из таблицы в SQLSERVER 2012 и сохраняет изображение на строку в виде файла на локальном диске

  public void SavePicture() { SqlConnection con = new SqlConnection("Data Source=localhost;Integrated security=true;database=databasename"); SqlDataAdapter da = new SqlDataAdapter("select top 100 [Name] ,[Picture] From tablename", con); SqlCommandBuilder MyCB = new SqlCommandBuilder(da); DataSet ds = new DataSet("tablename"); byte[] MyData = new byte[0]; da.Fill(ds, "tablename"); DataTable table = ds.Tables["tablename"]; for (int i = 0; i < table.Rows.Count;i++ ) { DataRow myRow; myRow = ds.Tables["tablename"].Rows[i]; MyData = (byte[])myRow["Picture"]; int ArraySize = new int(); ArraySize = MyData.GetUpperBound(0); FileStream fs = new FileStream(@"C:\NewFolder\" + myRow["Name"].ToString() + ".jpg", FileMode.OpenOrCreate, FileAccess.Write); fs.Write(MyData, 0, ArraySize); fs.Close(); } } 

обратите внимание: каталог с именем NewFolder должен существовать в C: \

Код:

 using System.IO; byte[] img = File.ReadAllBytes(openFileDialog1.FileName); 
  • WPF Binding - значение по умолчанию для пустой строки
  • Как установить ViewModel в окне в XAML с использованием свойства DataContext?
  • WPF TabControl - предотrotation разгрузки при изменении вкладки?
  • Форматирование даты в WPat datagrid
  • В чем разница между свойством зависимостей и прикрепленным свойством в WPF?
  • WPF Databinding: как мне получить доступ к «родительскому» контексту данных?
  • В WPF можно фильтровать CollectionViewSource без кода?
  • Установка DataContext в XAML в WPF
  • Настройка свойств canvasа в ItemControl DataTemplate
  • Предотвратить использование Dispatcher.Invoke в коде WPF.
  • Скрыть строку сетки в WPF
  • Interesting Posts

    Форматировать разблокированные ячейки с VBA в защищенном листе, но не заблокированные ячейки

    Какое максимальное поддерживаемое аппаратное ОЗУ в Windows 32-бит?

    Тип условного выражения не может быть определен, потому что нет никакого неявного преобразования между ‘string’ и ‘System.DBNull’

    Подсказки jQueryUI конкурируют с Twitter Bootstrap

    Как сделать перемещение изображения во время прослушивания нажатия клавиши на Java.

    Изменить размер для строки состояния вызова?

    Отключите активацию панели меню, когда Alt нажата в Windows 7

    Отображение цветовых профилей после обновления до Windows 8.1

    Выход HDMI для входа VGA

    Обрезка огромного (3,5 ГБ) файла csv для чтения в R

    Извлечение данных между двумя символами в Excel

    Лучший язык для анализа чрезвычайно больших файлов Excel 2007

    Изменить часовой пояс в объекте POSIXct

    Как получить размер доступной системной памяти?

    Как создать текстовый файл и вставить данные в этот файл на Android

    Давайте будем гением компьютера.