我正在尝试更改我的应用中的联系人缩略图。 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
设置图像而不将其保存在硬盘上,但结果是相同的
那么我如何修改我的代码才能更改联系人图片?