0

我正在开发一个本地网络可玩游戏的 WinRT 应用程序。我可以在应用程序中读取用户的 DisplayName 和 AccountPicture,并通过 xaml 在本地向用户显示它们。我正在使用以下代码将帐户图片转换为 BitmapImage 以在 xaml 页面中进行绑定:

private async Task<BitmapImage> GetDisplayImage()
    {
        BitmapImage image = null;

        if (CoreApplication.MainView != null)
        {
            await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
                CoreDispatcherPriority.Normal, async () =>
                {
                    var stream = await Windows.System.UserProfile.UserInformation.GetAccountPicture(Windows.System.UserProfile.AccountPictureKind.LargeImage).OpenReadAsync();
                    image = new BitmapImage();
                    image.SetSource(stream);
                });
        }
        return image;
    }

我认为可以将流读入字节数组,并在应用程序连接到其他应用程序时将其发送,然后像这样在另一端重构字节数组:

public static async Task<byte[]> ToArray(this IRandomAccessStream stream)
    {
        IBuffer buffer = new Windows.Storage.Streams.Buffer((uint)stream.Size);
        await stream.ReadAsync(buffer, buffer.Capacity, InputStreamOptions.ReadAhead);
        await stream.FlushAsync();
        return buffer.ToArray();
    }

然而,上线:

await stream.FlushAsync();

我收到 UnauthorizedAccessException:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

必须可以与其他人共享个人资料图片,因为我在其他地方看到它完成了,但我似乎找不到任何有关如何执行此操作的信息。如果有人能指出我正确的方向(我想知道我是否需要连接不同的 api,或者我是否需要在 App 清单中设置一些东西..),我将不胜感激。

4

1 回答 1

0

您可以直接读取IStorageFile返回的GetAccountPicture

var file = UserInformation.GetAccountPicture(AccountPictureKind.LargeImage);
var buffer = await FileIO.ReadBufferAsync(file);
var bytes = buffer.ToArray();
于 2013-07-07T07:35:04.347 回答