C# .NET可移植框架中的System.Drawing.Bitmap

C# .NET可移植框架中的System.Drawing.Bitmap,c#,porting,portable-class-library,C#,Porting,Portable Class Library,作为练习,我尝试移植到一个可移植类库。但是,其中一个函数返回一个System.Drawing.Bitmap,这在.NET可移植子集中不可用 考虑到以下功能,最好的替代方案是什么?由于项目的性质,我不关心向后兼容性 有关职能: /// <summary> /// Retrieve the avatar of the specified user in the specified format. /// </summary> /// <param name="user"

作为练习,我尝试移植到一个可移植类库。但是,其中一个函数返回一个
System.Drawing.Bitmap
,这在.NET可移植子集中不可用

考虑到以下功能,最好的替代方案是什么?由于项目的性质,我不关心向后兼容性

有关职能:

/// <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;
    }
}
//
///以指定格式检索指定用户的化身。
/// 
///使用者
///请求的化身大小
///成功时化身为位图,失败时为空。
公共位图GetUserAvatar(用户用户,AvatarSize size=AvatarSize.Small)
{
if(user.avatarUrl.Length==0)返回null;
尝试
{
WebClient客户端=新的WebClient();
溪流;
if(size==AvatarSize.Small)
stream=client.OpenRead(user.avatarUrl+“.jpg”);
else if(大小==虚拟化.Medium)
stream=client.OpenRead(user.avatarUrl+“_medium.jpg”);
其他的
stream=client.OpenRead(user.avatarUrl+“_full.jpg”);
位图化身=新位图(流);
stream.Flush();
stream.Close();
返回化身;
}
捕获(例外e)
{
返回null;
}
}

可移植类库不支持图形或web客户端

如果这是唯一有问题的方法,也许您可以在便携库中放弃这唯一的方法。或者,您可以考虑返回流,尽管您仍然需要找到一个用于从Web读取位图的解决方案。p> 更新


据我所知,这个方法可以是静态的。因此,另一种选择是为不可移植代码创建其他特定于平台的(.NET、Silverlight、WP7)库,并将此方法移动到特定于平台的库中的静态类。如果将该方法设置为扩展方法,则无需修改客户端代码即可使用该方法。当然,除了该方法应该返回而不是System.Drawing.Bitmap.

之外,请注意:
System.Windows.Media.Imaging.BitmapSource
不能很好地处理线程。