【问题标题】:Silverlight 4.0: How to convert byte[] to image?Silverlight 4.0:如何将 byte[] 转换为图像?
【发布时间】:2011-01-27 13:49:58
【问题描述】:
public Image Base64ToImage(string base64String)
    {
        // Convert Base64 String to byte[]
        byte[] imageBytes = Convert.FromBase64String(base64String);
        MemoryStream ms = new MemoryStream(imageBytes, 0,
          imageBytes.Length);

        // Convert byte[] to Image
        ms.Write(imageBytes, 0, imageBytes.Length);
        System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);
        return image;
    }

我想将 byte[] 转换为图像,但是 Silverlight 不支持 System.Drawing.Image。有什么选择吗?

【问题讨论】:

    标签: silverlight-4.0 bytearray base64 system.drawing


    【解决方案1】:

    您需要创建一个 ImageSource 并将其分配给 Image 控件或使用 ImageBrush 在背景上进行设置。 BitmapImage 位于 System.Windows.Media.Imaging 命名空间中。

            byte[] imageBytes = Convert.FromBase64String(base64String);
            using (MemoryStream ms = new MemoryStream(imageBytes, 0,
              imageBytes.Length))
            {
                BitmapImage im = new BitmapImage();
                im.SetSource(ms);
                this.imageControl.Source = im;
            }
    

    或用于 ImageBrush

            byte[] imageBytes = Convert.FromBase64String(base64String);
            using (MemoryStream ms = new MemoryStream(imageBytes, 0,
              imageBytes.Length))
            {
                BitmapImage im = new BitmapImage();
                im.SetSource(ms);
                imageBrush.ImageSource = im;
                this.BoxBorder.Background = imageBrush;
            }
    

    【讨论】:

    • 为什么需要使用Write方法将imageBytes写入MemoryStream?他们不是从演员那里得到的吗? im.SetSource(stream) 不应该是 im.SetSource(ms) 吗?
    • 哦,是的,我只是为了方便而重用了他上面的原始代码,但现在看 - 有点不对劲。
    【解决方案2】:

    此代码可以将图像转换为字节[]

    BitmapImage imageSource = new BitmapImage();
    Stream stream = openFileDialog1.File.OpenRead();
    BinaryReader binaryReader = new BinaryReader(stream);
    currentImageInBytes = new byte[0];
    
    currentImageInBytes = binaryReader.ReadBytes((int)stream.Length);
    stream.Position = 0;
    imageSource.SetSource(stream);
    

    并且这段代码可以将字节[]转换为图像

    public void Base64ToImage(byte[] imageBytes)
    {
    
        using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
        {
            BitmapImage im = new BitmapImage();
            im.SetSource(ms);
            img.Source = im;
        }
    }
    

    【讨论】:

      【解决方案3】:

      另一种方式:

          public static BitmapImage ConvertStreamToImage(Stream stream)
          {
              BitmapImage _resultImage = new BitmapImage();
      
              _resultImage.SetSource(stream);
      
              return _resultImage;
          }
      

      使用这些名称空间: using System.IO; using System.Windows.Media.Imaging;

      【讨论】:

        猜你喜欢
        • 2017-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-28
        • 2015-05-23
        • 2011-11-04
        相关资源
        最近更新 更多