Преобразование UIImage в байт-массив

Мне нужно преобразовать UIImage в массив байтов. Я использую плагин Xamarin Visual Studio для создания приложения iOS.

Бит кода ниже получает изображение, но мне нужно отправить его через Service Stack в виде байтового массива вместо UIImage.

        var signatureView = new SignaturePad.SignaturePadView(new RectangleF(10, 660, 300, 150));
        signatureView.BackgroundColor = UIColor.White;
        this.View.AddSubview(signatureView);
        UIImage signatureImage = signatureView.GetImage();

Ответ 1

Бесстыдно украден из 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));
}

Ответ 2

Прошло много времени с тех пор, как я проверил API ServiceStack, но , если возможно, попробуйте избежать byte[], так как ему нужно будет создать другую копию тех же данных. Во многих случаях это не имеет значения, но изображения часто огромны.

например. если есть перегрузка, которая принимает System.IO.Stream, то используйте image.AsPNG ().AsStream () и избегайте служебных данных: -)

Ответ 3

Stream pst =   img.AsPNG().AsStream();