代码之家  ›  专栏  ›  技术社区  ›  Vaibhav Garg

如何从image.source获取内存流/base64字符串?

  •  4
  • Vaibhav Garg  · 技术社区  · 14 年前

    我有一个动态创建的图像控件,它通过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 回复  |  直到 14 年前
        1
  •  10
  •   TheCodeKing    14 年前

    这里有一个可以工作的替代方案(没有bmpbitmapencoder)。它使用filestream流创建字节数组,然后将其转换为base64字符串。这假定您希望在当前代码的范围内执行此操作。

      Byte[] bytes = new Byte[stream.Length];
      stream.Read(bytes, 0, bytes.Length);
      return Convert.ToBase64String(bytes); 
    
        2
  •  3
  •   Rus    14 年前

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