如何更改Windows应用商店应用中的联系人缩略图

时间:2014-02-22 16:23:18

标签: c# .net windows-8 windows-runtime windows-store-apps

我正在尝试更改我的应用中的联系人缩略图。 Contact类有一个属性Thumbnail,可以设置为提示我智能感知:

  

“获取或设置代表此联系人的缩略图”

在我的应用程序中有一个网格控件,其中包含一些图像。此外,还有一个简单的按钮,用于打开联系人选择器,选择联系人应用程序后,将更改已选择的联系人的缩略图图像。 首先,我有一种方法,可以将图像从网格渲染并保存到文件系统中:

private async Task SaveImage()
{
    var renderTargetBitmap = new RenderTargetBitmap();
    await renderTargetBitmap.RenderAsync(this.IconGrid);
    var pixelBuffer = await renderTargetBitmap.GetPixelsAsync();

    var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("test.png", CreationCollisionOption.ReplaceExisting);

    using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
    {
        BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
        encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)renderTargetBitmap.PixelWidth, (uint)renderTargetBitmap.PixelHeight, 96d, 96d, pixelBuffer.ToArray());

        await encoder.FlushAsync();
    }
} 

此方法非常有效,可以根据需要保存图像。 这是一个负责挑选联系人和更改缩略图的方法:

private async void SaveButton_Click(object sender, RoutedEventArgs e)
{
    ContactPicker contactPicker = new ContactPicker();
    contactPicker.CommitButtonText = "Select";
    contactPicker.SelectionMode = ContactSelectionMode.Contacts;

    await SaveImage();
    var file = await ApplicationData.Current.LocalFolder.GetFileAsync("test.png");
    Contact contact = await contactPicker.PickContactAsync();
    contact.Thumbnail = RandomAccessStreamReference.CreateFromFile(file);           
}   

上述方法无异常。但结果是联系人图片没有改变,它仍然是旧的。我也尝试从InMemoryRandomAccessStream设置图像而不将其保存在硬盘上,但结果是相同的

那么我如何修改我的代码才能更改联系人图片?

0 个答案:

没有答案