将BitmapImage转换为byte []

时间:2015-09-08 08:58:17

标签: c# windows-phone-8.1 bytearray

我将BitmapImage转换为byte []时遇到问题。每次我遇到不同的错误时,我尝试了很多解决方案并且没有任何效果。

例如,我找到了很好的解决方案,但它也没有用。它有什么问题?

我使用的是Windows Phone 8.1。

public static byte[] ImageToBytes(BitmapImage img)
{
    using (MemoryStream ms = new MemoryStream())
    {
        WriteableBitmap btmMap = new WriteableBitmap(img);
        System.Windows.Media.Imaging.Extensions.SaveJpeg(btmMap, ms, img.PixelWidth, img.PixelHeight, 0, 100);
        img = null;
        return ms.ToArray();
    }
}

这是从这里获取的:Convert Bitmap Image to byte array (Windows phone 8)

  

没有任何论据符合所要求的形式   参数' pixelHeight' ' WriteableBitmap.WriteableBitmap(int,int)'

     

类型或命名空间名称'扩展程序'不存在于   namespace' System.Windows.Media.Imaging' (你错过了一个集会吗?   引用?)

或者如果有人知道如何转换它,请发布它。非常感谢您的帮助!

我也试过这个:BitmapImage to byte[]

但使用时存在问题

  

'的BitmapImage'是System.Windows.Media.Imaging.BitmapImage'之间的模糊参考。和' Windows.UI.Xaml.Media.Imaging.BitmapImage'

所以我用了#34; BitmapEncoder"但它没有像Save和Frame这样的方法。

4 个答案:

答案 0 :(得分:1)

我认为在这个平台上无法完成。我将我的项目更改为Windows Phone Silverlight / 8.0,并且可以正常运行。

 public static BitmapImage BytesToImage(byte[] bytes)
    {
        BitmapImage bitmapImage = new BitmapImage();
        try
        {
            using (MemoryStream ms = new MemoryStream(bytes))
            {
                bitmapImage.SetSource(ms);
                return bitmapImage;
            }
        }
        finally { bitmapImage = null; }
    }

    public static byte[] ImageToBytes(BitmapImage img)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            WriteableBitmap btmMap = new WriteableBitmap(img);
            System.Windows.Media.Imaging.Extensions.SaveJpeg(btmMap, ms, img.PixelWidth, img.PixelHeight, 0, 100);
            img = null;
            return ms.ToArray();
        }
    }

答案 1 :(得分:0)

答案 2 :(得分:0)

你试过吗

      MemoryStream ms = new MemoryStream();
      WriteableBitmap wb = new WriteableBitmap(myImage);
      wb.SaveJpeg(ms, myImage.PixelWidth, myImage.PixelHeight, 0, 100);
      byte[] imageBytes = ms.ToArray();

您也可以在此处使用扩展方法

      public static class MyExtensions
      {
          public static Byte[] ByteFromImage(this System.Windows.Media.Imaging.BitmapImage imageSource)
          {
            Stream stream = imageSource.StreamSource;
            Byte[] imagebyte = null;
            if (stream != null && stream.Length > 0)
            {
               using (BinaryReader br = new BinaryReader(stream))
               {
                 imagebyte = br.ReadBytes((Int32)stream.Length);
               }
            }

              return imagebyte;
          }
       }

然后致电

        System.Windows.Media.Imaging.BitmapImage myImage = new System.Windows.Media.Imaging.BitmapImage();
        byte[] imageBytes = myImage.ByteFromImage();

答案 3 :(得分:0)

如果您要对图像进行任何转换,则需要使用适当的图像编码器,然后执行如下操作。如果您正在处理多帧图像(例如 TIF),则需要一次将帧添加到编码器,否则您只会获得图像的第一帧。

MemoryStream ms = null;
TiffBitmapEncoder enc = null

enc = new TiffBitmapEncoder();
enc.Compression = TiffCompressOption.Ccitt4;
enc.Frames.Add(BitmapFrame.Create(bmpImg));
using (ms = new MemoryStream())
{
  enc.Save(ms);
}
return ms.ToArray();