WinRT如何保存图像的ContactPicker IRandomAccessStreamWithContentType

本文关键字:图像 ContactPicker IRandomAccessStreamWithContentType 保存 何保存 WinRT | 更新日期: 2023-09-27 18:01:41

使用下面的代码,我可以得到一个代表联系人拇指的IRandomAccessStreamWithContentType

var contactPicker = new ContactPicker();
contactPicker.SelectionMode = ContactSelectionMode.Contacts;
var contact = await contactPicker.PickSingleContactAsync();
var thumb = await contact.GetThumbnailAsync();

但是处理IRandomAccessStreamWithContentType以获得图像实例和图像文件的最佳方法是什么呢?

WinRT如何保存图像的ContactPicker IRandomAccessStreamWithContentType

你应该处理它作为一个普通的IRandomAccessStream包含图像:

using (var stream = await contact.GetThumbnailAsync())
{
    BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
    BitmapFrame frame = await decoder.GetFrameAsync(0);
    var bitmap = new WriteableBitmap((int)frame.PixelWidth, (int)frame.PixelHeight);
    stream.Seek(0);
    await bitmap.SetSourceAsync(stream);
}

从这里开始,您可以将WriteableBitmap设置为Image控件的源或以任何其他方式使用它。

Seek调用是必需的,因为流已经被读取以获得图像大小,因此需要在读取图像本身之前重置位置。