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