Как конвертировать System.Windows.Controls.Image в Base64?

484
08 февраля 2017, 22:21

Нужно для

System.Windows.Controls. Image

Answer 1

Из System.Windows.Controls.Image картинку можете скопировать в переменную BitmapImage image и передать в метод, и получить на выходе строку.

    /// <summary>
    /// Преобразование изображения в строку Base64
    /// </summary>
    /// <param name="image">целевое изображение</param>
    /// <returns>строка Base64</returns>
    public static string ImageToBase64(BitmapImage image)
    {
        //проверяем параметр
        if (image == null) throw new ArgumentException($"{nameof(image)} не может пустым");
        //запоминать будем jpeg
        JpegBitmapEncoder encoder = new JpegBitmapEncoder();
        //содержимое картинки
        encoder.Frames.Add(BitmapFrame.Create(image));
        byte[] imageBytes = null;
        using (MemoryStream ms = new MemoryStream())
        {
            //пишем в поток
            encoder.Save(ms);
            //поток в массив байт
            imageBytes = ms.ToArray();
        }
        //массив байт конвертируем в строку
        string result = Convert.ToBase64String(imageBytes);
        //отдаем результат
        return result;
   }

    /// <summary>
    /// Получение изображения из строки Base64
    /// </summary>
    /// <param name="base64String">строка Base64</param>
    /// <returns>целевое изображение</returns>
    public static BitmapImage Base64ToImage(string base64String)
    {
        //проверка параметра
        if (String.IsNullOrEmpty(base64String)) throw new ArgumentException($"{nameof(base64String)} не может быть пустым");
        //Конвертация Base64 String в byte[]
        byte[] imageBytes = Convert.FromBase64String(base64String);
        BitmapImage result = new BitmapImage();
        using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
        {
            //читаем картинку из потока
            result.BeginInit();
            result.CacheOption = BitmapCacheOption.OnLoad;
            result.StreamSource = ms;
            result.EndInit();
        }
        return result;
    }
READ ALSO
Стили форматирования DataGridView

Стили форматирования DataGridView

Есть DataGridView, который отображает коллекцию экземпляров SomeClass

501
Где можно скачать готовый стиль и триггер для компонента MENU в WPF? [требует правки]

Где можно скачать готовый стиль и триггер для компонента MENU в WPF? [требует правки]

Добрый день! Подскажите, где можно скачать готовые стили для компонент WPF?

359
Класс-конструктор-как реализовать? [требует правки]

Класс-конструктор-как реализовать? [требует правки]

Есть несколько классов с параметрами, задача-один из них заменить или добавить класс-конструктор Задачка лёгкая, уровня начальной школы,...

290
&#39;SplashScreen&#39; does not contain a constructor that takes 1 arguments

'SplashScreen' does not contain a constructor that takes 1 arguments

Такая ошибка при попытке создать Splash заставкуПример был взять на MSDN

335