Xamarin IOS编码/解码图像到Base64

时间:2014-10-21 13:46:36

标签: c# ios xamarin.ios xamarin

我正在为Xamarin开发IOS应用程序。我有一个菜单,其中我要求一个名为“Doublechecks”的东西。这些doublechecks有一个名为“Medication”的字段。在该应用程序的先前工作副本中,我只是使用一个字符串来填充此字段,但现在我们有了这样的想法,而不是用字符串填充此药物字段,以填充图像。我得到的一个提示是将拍摄或选择的图像转换为base64。

在我进行新的双重检查的菜单中,我有一个弹出动作表的按钮,您可以在其中选择要从PhotoLibrary中选择图像的天气,或者使用相机拍摄新照片。拍摄或选择照片后,我使用以下方法将其编码为Base64:

var imageToSend = originalImage.AsJPEG (0.23f).GetBase64EncodedString (NSDataBase64EncodingOptions.None);

原始图像是我拍摄/选择的图像。现在,在请求所有双重检查时,我使用以下内容对其进行解码:

byte[] encodedDataAsBytes = System.Convert.FromBase64String (imageToDisplay);
string decoded = System.Text.Encoding.ASCII.GetString (encodedDataAsBytes);
NSData data = NSData.FromString (decoded, NSStringEncoding.ASCIIStringEncoding);
return UIImage.LoadFromData (data);

该方法一直有效,直到返回。不知何故,UIImage没有被构造,并且其值为null,即使'data'包含已解码的字符串。

我搜索了几个主题和论坛,但没有多大用处。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

为什么要将base64 已解码数据转换为string

由于你已经拥有了字节数组,所以你应该能够做到:

byte[] encodedDataAsBytes = System.Convert.FromBase64String (imageToDisplay);
NSData data = NSData.FromArray (encodedDataAsBytes);
return UIImage.LoadFromData (data);

答案 1 :(得分:0)

NSData方法并不总是一个好的解决方案。您也可以尝试以下

var rawData = pixelMap.ToByteArray();

        using (var provider = new CGDataProvider(rawData, 0, rawData.Length))
        {
            using (var colorSpace = CGColorSpace.CreateDeviceRGB())
            {
                var cgImage = new CGImage(
                    pixelMap.Width,
                    pixelMap.Height,
                    pixelMap.BitsPerComponent,
                    pixelMap.BytesPerPixel * ByteToBit,
                    pixelMap.BytesPerPixel * pixelMap.Width,
                    colorSpace,
                    CGBitmapFlags.ByteOrderDefault,
                    provider,
                    null,
                    true,
                    CGColorRenderingIntent.Default
                );

                return ImageSource.FromStream(() => UIImage.FromImage(cgImage).AsPNG().AsStream());
            }
        }

查看我的库和示例,了解有关Android和iOS位图的更多信息,从/到2d像素图。 https://github.com/enginkirmaci/Imaging-Library