2013-06-14 22 views
10

Tôi cần chuyển đổi UIImage thành mảng byte. Tôi đang sử dụng plugin Visual Studio của Xamarin để tạo ra một ứng dụng iOS.Chuyển đổi UIImage sang Byte Array

Đoạn mã dưới đây nhận được hình ảnh, nhưng tôi cần gửi nó qua Ngăn xếp dịch vụ dưới dạng mảng byte thay vì UIImage.

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

Trả lời

20

shamelessly bị đánh cắp từ 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)); 
} 
13

Nó được một thời gian dài kể từ khi tôi đã kiểm tra các API ServiceStack nhưng, nếu có thể, cố gắng tránh byte[] vì nó sẽ cần phải tạo ra một bản sao của cùng một dữ liệu. Nó không quan trọng trong nhiều trường hợp nhưng hình ảnh thường rất lớn.

Ví dụ: nếu có một tình trạng quá tải mà chấp nhận một System.IO.Stream sau đó sử dụng image.AsPNG().AsStream() và tránh những phí :-)

+2

Sử dụng image.AsPNG() không giữ lá cờ định hướng, vì vậy nó có vẻ tốt hơn để sử dụng image.AsJPEG() để có được dong chảy. Điều đó đã cho tôi hai giờ ;-). –

7
Stream pst = img.AsPNG().AsStream(); 
+0

Đây phải là câu trả lời được chấp nhận .. – Indy9000

+0

Bạn cũng có thể sử dụng. ToArray(); – Csharpest