ophelia
ophelia

Reputation: 13

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

Upvotes: 0

Views: 1440

Answers (4)

ophelia
ophelia

Reputation: 13

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.

Upvotes: 0

Afnan Makhdoom
Afnan Makhdoom

Reputation: 654

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

Upvotes: 1

Zee Janjua
Zee Janjua

Reputation: 75

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

Upvotes: 1

Janis S.
Janis S.

Reputation: 2626

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[]));
}

Upvotes: 1

Related Questions