【问题标题】:BitmapImage to byte[] - C# webBitmapImage 到 byte[] - C# web
【发布时间】:2017-08-24 09:22:42
【问题描述】:

我需要将 BitmapImage 转换为 byte[],但我没有找到如何在 C# web.xml 中执行此操作。 我找到了示例,但它们都不起作用(JpegBitmapEncoder 不存在,BitmapImageObject.StreamSource 不存在,没有以 BitmapImage 作为参数的 WriteableBitmap 构造函数,Extensions.SaveJpeg(parameters) 不存在存在...)。

我找到的例子:

构造函数new WriteableBitmap(bitmapImage)不存在。

public static byte[] ConvertToBytes(this BitmapImage bitmapImage)
{
    byte[] data;
    // Get an Image Stream
    using (MemoryStream ms = new MemoryStream())
    {
        WriteableBitmap btmMap = new WriteableBitmap(bitmapImage);

        // write an image into the stream
        Extensions.SaveJpeg(btmMap, ms,
            bitmapImage.PixelWidth, bitmapImage.PixelHeight, 0, 100);

        // reset the stream pointer to the beginning
        ms.Seek(0, 0);
        //read the stream into a byte array
        data = new byte[ms.Length];
        ms.Read(data, 0, data.Length);
    }
    //data now holds the bytes of the image
    return data;
}

new WriteableBitmap(img)System.Windows.Media.Imaging.Extensions.SaveJpeg 不存在。

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();
    }
}

imageSource.StreamSource 不存在。

public static byte[] ImageToByte(BitmapImage imageSource)
{
    Stream stream = imageSource.StreamSource;
    Byte[] buffer = null;
    if (stream != null && stream.Length > 0)
    {
        using (BinaryReader br = new BinaryReader(stream))
        {
            buffer = br.ReadBytes((Int32)stream.Length);
        }
    }

    return buffer;
}

JpegBitmapEncoder 不存在。

byte[] data;
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
using(MemoryStream ms = new MemoryStream())
{
    encoder.Save(ms);
    data = ms.ToArray();
}

【问题讨论】:

  • 看来您需要链接一些外部库。阅读相关内容,之后您也许可以解决此问题。
  • 你能把你的代码分享到github吗?

标签: c# arrays bitmap bitmapimage


【解决方案1】:

尝试在代码开头使用using statement 命名空间。 否则应该有一些 Nuget 包可以安装以实现您的目标。

using System.Drawing;

Main方法中

Image img = Image.FromFile("path to the file");
var byteArray = ImageToByte(img);

public static byte[] ImageToByte(Image img)
{
   ImageConverter converter = new ImageConverter();
   return (byte[])converter.ConvertTo(img, typeof(byte[]));
}

【讨论】:

    【解决方案2】:

    试试这个 我认为这会有所帮助...

    public byte[] ConvertBitMapToByteArray(Bitmap bitmap)
    {
      byte[] result = null;
      if (bitmap != null)
       {
         MemoryStream stream = new MemoryStream();
         bitmap.Save(stream, bitmap.RawFormat);
         result = stream.ToArray();
       }
     return result;
    }
    

    【讨论】:

      【解决方案3】:
      byte[] foo = System.IO.File.ReadAllBytes("bitmap path");
      

      或者

      byte[] foo;
      Object obj = YourBitmap;
      BinaryFormatter bf = new BinaryFormatter();
      using (var ms = new MemoryStream())
      {
          bf.Serialize(ms, obj);
          foo = ms.ToArray();
      }
      

      或者

      ImageConverter foocon = new ImageConverter();
      byte[] foo = (byte[])foocon.ConvertTo(YourBitmap, typeof(byte[]));
      

      或者

      MemoryStream ms = new MemoryStream();
      Bitmap.Save(ms, YourBitmap.RawFormat);
      byte[] foo = ms.ToArray();
      

      【讨论】:

        【解决方案4】:

        最后,显然,它似乎遗漏了一些库,但我们的应用程序受到限制,因此我们决定通过另一种方式恢复我们的图片。无论如何,谢谢大家。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-26
          相关资源
          最近更新 更多