简体   繁体   中英

BitmapImage to byte[] - C# web

I need to convert a BitmapImage in a byte[] but I don't find how to do it in C# web. I found examples but none of them work (JpegBitmapEncoder doesn't exist, BitmapImageObject.StreamSource doesn't exist, there isn't WriteableBitmap constructor with BitmapImage as parameter, Extensions.SaveJpeg( parameters ) doesn't exist ...).

Examples I found:

Constructor new WriteableBitmap(bitmapImage) doesn't exist.

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 don't exist.

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 doesn't exist.

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 doesn't exist.

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

Try with the using statement to a namespace in the beginning of your code. Otherwise there should be some Nuget packages which you could install to achieve your goal.

using System.Drawing;

In Main method

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[]));
}
byte[] foo = System.IO.File.ReadAllBytes("bitmap path");

Or

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

Or

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

Or

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

Try this I think this will help...

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

Finally, it seems that, obviously, it missed some libraries but we are limited with our application, so we decided to recover our pictures by another way. Anyway, thank you all.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM