簡體   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