Вопрос: Как получить поток памяти / Base64 String из Image.Source?


У меня есть динамически созданный элемент управления Image, который заполняется через OpenFileDialog, например:

OpenFileDialog dialog = new OpenFileDialog();
if (dialog.ShowDialog() == true)
{
    using (FileStream stream = dialog.File.OpenRead())
    {                    
        BitmapImage bmp = new BitmapImage();
        bmp.SetSource(stream);
        myImage.Source = bmp;
    }
}

Я хочу отправить изображение обратно на сервер в отдельный вызов функции, как строку через веб-службу.

Как получить строку потока памяти / base64 из myImage.Source


4


источник


Ответы:


Вот альтернатива, которая должна работать (без BmpBitmapEncoder). Он использует поток FileStream для создания массива байтов, который затем преобразуется в строку Base64. Предполагается, что вы хотите сделать это в рамках текущего кода.

  Byte[] bytes = new Byte[stream.Length];
  stream.Read(bytes, 0, bytes.Length);
  return Convert.ToBase64String(bytes); 

10



Убедитесь, что у вас есть http://imagetools.codeplex.com/

Тогда вы можете сделать это:

ImageSource myStartImage;

var image = ((WriteableBitmap) myStartImage).ToImage();
var encoder = new PngEncoder( false );

MemoryStream stream = new MemoryStream();
encoder.Encode( image, stream );

var myStartImageByteStream = stream.GetBuffer();

Затем для Base64:

string encodedData = Convert.ToBase64String(myStartImageByteStream);

3



Как получить поток памяти / Base64 String из Image.Source? | Programmerz.ru