2012-07-20 91 views
3

作爲練習,我試圖將Overv/SteamWebAPI移植到可移植類庫中。但是,其中一個函數返回一個System.Drawing.Bitmap,這在.NET Portable子集中不可用。.NET Portable Framework中的System.Drawing.Bitmap

考慮到下面的功能,最好的選擇是什麼?由於該項目的性質,我不關心後向兼容性問題。

有問題的功能:

/// <summary> 
/// Retrieve the avatar of the specified user in the specified format. 
/// </summary> 
/// <param name="user">User</param> 
/// <param name="size">Requested avatar size</param> 
/// <returns>The avatar as bitmap on success or null on failure.</returns> 
public Bitmap GetUserAvatar(User user, AvatarSize size = AvatarSize.Small) 
{ 
    if (user.avatarUrl.Length == 0) return null; 

    try 
    { 
     WebClient client = new WebClient(); 

     Stream stream; 
     if (size == AvatarSize.Small) 
      stream = client.OpenRead(user.avatarUrl + ".jpg"); 
     else if (size == AvatarSize.Medium) 
      stream = client.OpenRead(user.avatarUrl + "_medium.jpg"); 
     else 
      stream = client.OpenRead(user.avatarUrl + "_full.jpg"); 

     Bitmap avatar = new Bitmap(stream); 
     stream.Flush(); 
     stream.Close(); 

     return avatar; 
    } 
    catch (Exception e) 
    { 
     return null; 
    } 
} 

回答

3

可移植類庫確實not contain顯卡也不Web客戶端的支持。

如果這是唯一違規的方法,那麼也許你可以在你的便攜庫中丟棄這個唯一的方法。或者,您可以考慮返回,儘管您仍然需要找到一種解決方法來從Web中讀取位圖。

UPDATE

據我所知,該方法可以進行靜態的。因此,另一種選擇是爲非可移植代碼創建其他平臺特定的(.NET,Silverlight,WP7)庫,並將此方法移至特定於平臺的庫中的靜態類。如果您使該方法成爲擴展方法,那麼您將能夠使用該方法,而無需修改客戶端代碼。當然,除了該方法應返回System.Windows.Media.Imaging.BitmapSource而不是System.Drawing.Bitmap

+0

但要小心:'System.Windows.Media.Imaging.BitmapSource'在線程中播放效果並不好。 – vines 2017-09-06 11:34:00