Как получить поток памяти / Base64 String из Image.Source? - PullRequest
4 голосов
/ 23 сентября 2010

У меня есть динамически созданный элемент управления 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

Ответы [ 2 ]

10 голосов
/ 23 сентября 2010

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

  Byte[] bytes = new Byte[stream.Length];
  stream.Read(bytes, 0, bytes.Length);
  return Convert.ToBase64String(bytes); 
3 голосов
/ 23 сентября 2010

Убедитесь, что у вас есть 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...