[英]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.