4

演習として、Overv/SteamWebAPIをポータブル クラス ライブラリに移植しようとしています。ただし、関数の 1 つが を返しますがSystem.Drawing.Bitmap、これは .NET Portable サブセットでは使用できません。

以下の機能を考慮すると、最良の代替手段は何ですか? プロジェクトの性質上、下位互換性については心配していません。

問題の機能:

/// <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;
    }
}
4

1 に答える 1

3

ポータブル クラス ライブラリには、グラフィックや Web クライアントのサポートは含まれていません。

これが唯一の問題のある方法である場合は、ポータブル ライブラリでこの唯一の方法を破棄することができます。別の方法として、 Streamを返すことを検討することもできますが、Web からビットマップを読み取るための回避策を見つける必要があります。

アップデート

私が知る限り、メソッドは静的にすることができます。したがって、移植性のないコード用に追加のプラットフォーム固有 (.NET、Silverlight、WP7) ライブラリを作成し、このメソッドをプラットフォーム固有のライブラリの静的クラスに移動するという別の方法があります。メソッドを拡張メソッドにすると、クライアント コードを変更せずにメソッドを使用できるようになります。もちろん、メソッドがSystem.Drawing.BitmapではなくSystem.Windows.Media.Imaging.BitmapSourceを返す必要があることを除きます。

于 2012-07-20T19:29:18.543 に答える