如何从Image.Source获取Memory Stream / Base64字符串?

时间:2010-09-23 09:51:11

标签: silverlight

我有一个动态创建的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;
    }
}

我想通过Web服务以单独的函数调用将图像发送回服务器。

如何从myImage.Source获取内存流/ base64字符串

2 个答案:

答案 0 :(得分:10)

这是一个应该有效的替代方案(没有BmpBitmapEncoder)。它使用FileStream流来创建字节数组,然后将其转换为Base64字符串。这假设您希望在当前代码的范围内执行此操作。

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

答案 1 :(得分:3)

确保您拥有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);