簡體   English   中英

在Windows 8.1中使用C#從base64轉換為圖像的秘密

[英]covert from base64 to image using c# in windows 8.1

使用c#windows 8.1 *************從base64轉換為圖像的任何可執行功能。 我試過了 :

public Image byteArrayToImage(byte[] byteArrayIn)
{
    Image returnImage = null;
    using (MemoryStream ms = new MemoryStream(byteArrayIn))
    {
       returnImage = Image.FromStream(ms);
    }
 return returnImage;
}

FromStream不適合Windows 8.1

首先, Windows.UI.Xaml.Controls.Image類是一個控件對象,而不是實際的位圖類型對象。 您真正想要的是一個BitmapImage 當然,由於這種誤解,您的代碼很可能會遇到其他問題。 您沒有顯示此方法的調用者,但是如果您在此處混淆了類型,則可能已在其他地方混淆了它。 因此,必須將其修復。

其次,與WinRT中的許多事情一樣,執行所需的操作比使用桌面API的要復雜一些。 :(

也就是說,這樣的事情應該起作用:

public Windows.UI.Xaml.Media.Imaging.BitmapImage byteArrayToImage(byte[] byteArrayIn)
{
    using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
    {
        await stream.WriteAsync(byteArrayIn.AsBuffer(0, byteArrayIn.Length));
        stream.Seek(0);

        BitmapImage image = new BitmapImage();

        await image.SetSourceAsync(stream);

        return image;
    }
}

然后,您可以將該對象設置為Image控件對象的Source屬性。

一些注意事項:

  1. 在您的原始示例中,處理源流至少是非常規的。 我的記憶是,至少在某些情況下,這樣做是不合法的,因為返回的Bitmap對象要求Stream實例保持未處置狀態。 對於WinRT,在位圖初始化使用AFAIK處理流就可以了。
  2. AsBuffer()方法是擴展方法。 您將需要using System.Runtime.InteropServices.WindowsRuntime; 在您的代碼中(如果尚不可用)。

也可以看看:

暫無
暫無

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

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