Converting UIImage to Byte Array

18,684

Solution 1

Shamelessly stolen from ChrisNTR

using (NSData imageData = image.AsPNG()) {
  Byte[] myByteArray = new Byte[imageData.Length];
  System.Runtime.InteropServices.Marshal.Copy(imageData.Bytes, myByteArray, 0, Convert.ToInt32(imageData.Length));
}

Solution 2

It's been a long time since I checked the ServiceStack API but, if possible, try to avoid byte[] since it will need to create another copy of the same data. It does not matter in many cases but images are often huge.

E.g. if there's an overload that accept a System.IO.Stream then use image.AsPNG ().AsStream () and avoid the overhead :-)

Solution 3

Stream pst =   img.AsPNG().AsStream();
Share:
18,684

Related videos on Youtube

Yahiko Kikikoto
Author by

Yahiko Kikikoto

Updated on September 14, 2022

Comments

  • Yahiko Kikikoto
    Yahiko Kikikoto over 1 year

    I need to convert a UIImage to a byte array. I am using Xamarin's Visual Studio plugin to produce an iOS application.

    The bit of code below gets the image, but I need to send it across a Service Stack as a byte array instead of a UIImage.

            var signatureView = new SignaturePad.SignaturePadView(new RectangleF(10, 660, 300, 150));
            signatureView.BackgroundColor = UIColor.White;
            this.View.AddSubview(signatureView);
            UIImage signatureImage = signatureView.GetImage();
    
  • asp_net
    asp_net about 10 years
    Using image.AsPNG() does not keep the orientation flag, so it seems better to use image.AsJPEG() to get the stream. That took me two hours ;-).
  • Csharpest
    Csharpest about 6 years
    You could also use .ToArray();