我有一个动态创建的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字符串
答案 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);