繁体   English   中英

Xamarin IOS编码和解码Base64的图像

[英]Xamarin IOS Encoding/Decoding Images from and to Base64

我正在Xamarin中为IOS开发应用程序。 我有一个菜单,我在其中请求一个叫做“ Doublechecks”的东西。 这些复选具有名为“ Medication”的字段。 在该应用程序的上一个工作副本中,我只是使用一个字符串来填充该字段,但是现在我们有了一个主意,而不是使用字符串来填充此药物字段,而是使用图像来填充它。 我得到的技巧之一是将拍摄或选择的图像转换为base64。

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

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

其中originalImage是我拍摄/选择的图像。 现在,当请求所有仔细检查时,我使用以下代码对其进行解码:

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。

我已经搜索了多个线程和论坛,但没有多大用处。 任何帮助将非常感激。

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

由于您已经拥有字节数组,因此您应该可以简单地执行以下操作:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM