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 に答える