簡體   English   中英

從base64string顯示圖像

[英]Displaying image from base64string

我正在顯示來自API的基本64字符串的圖像。 問題是,圖像沒有顯示。

這是代碼:

profilePictureImg.Source = GetUserImage(user.MobileNumber);


private BitmapImage GetUserImage(string phoneNumber)
    {
        BitmapImage bitmapImage = new BitmapImage();

        var baseAddress = "http://192.168.0.103/vchatapi/api/Images/" + phoneNumber;

        var http = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(new System.Uri(baseAddress));
        http.Accept = "application/json";
        http.ContentType = "application/json";
        http.Method = "GET";

        var response = http.GetResponse();

        var stream = response.GetResponseStream();
        var sr = new StreamReader(stream);
        var content = sr.ReadToEnd();
        var y ="";
        var x = y.FromJson(content);

        byte[] binaryData = Convert.FromBase64String(x);

        using (MemoryStream ms = new MemoryStream(binaryData, 0, binaryData.Length))
        {
            ms.Write(binaryData, 0, binaryData.Length);
            bitmapImage.StreamSource = ms;

        }
        return bitmapImage;
    }

有任何想法嗎?? 謝謝!

編輯:

得到了修復。 出於某種原因,它需要調用BeginInit和EndInit。

圖像可以解碼,如下面的答案所示:

var binaryData = Convert.FromBase64String(x);
var bitmapImage = new BitmapImage();

using (var stream = new MemoryStream(binaryData))
{
    bitmapImage.BeginInit();
    bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
    bitmapImage.StreamSource = stream;
    bitmapImage.EndInit();
}

您必須使用BeginInitEndInit的原因在BitmapImage MSDN文檔的備注部分中進行了解釋:

BitmapImage實現ISupportInitialize接口以優化多個屬性的初始化。 屬性更改只能在對象初始化期間發生。 調用BeginInit表示初始化已經開始,EndInit表示初始化已完成。 初始化后,將忽略屬性更改。

這可能是其中一種情況,即急於處理流; 此外, Write此處是不必要的:您已經通過構造函數添加了數據。 所以就:

bitmapImage.StreamSource = new MemoryStream(binaryData);
return bitmapImage;

那樣有用嗎?

您可以嘗試以下方法

byte[] binaryData = Convert.FromBase64String(x);
using (MemoryStream ms = new MemoryStream(binaryData))
{
    bitmapImage = (Bitmap)Image.FromStream(ms);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM