我想要一些帮助来获取联系人的缩略图并将其保存到本地存储,我成功获得联系人缩略图但我无法从流中获取实际图像,这是我的代码:
mo = nil
此代码在本地存储中创建一个空图像,有什么帮助吗?
感谢您的时间
答案 0 :(得分:2)
我相信您可能必须在读取之后调用stream.Dispose(),或者使用using指令初始化流:using (var outputStream = stream.GetOutputStreamAt(0))
答案 1 :(得分:2)
这里的问题是你错过了Stream.Flush
method来将缓冲区刷新到底层流。您可以在fileStream.Flush();
方法之后添加fileStream.WriteAsync
来解决问题。
除此之外,我们还需要在完成使用后调用Stream.Dispose Method来释放Stream使用的资源。此方法通过将任何更改写入后备存储并关闭流来释放资源来处理流。因此,我们可以在fileStream.Dispose()
方法之后使用fileStream.WriteAsync
。
调用Dispose
方法的推荐方法是使用C#使用语句,如下所示:
var contactStore = await ContactManager.RequestStoreAsync();
var contacts = await contactStore.FindContactsAsync();
var myContact = contacts[0]; //I am sure that this Contact has a Thumbnail
using (var stream = await myContact.Thumbnail.OpenReadAsync())
{
byte[] buffer = new byte[stream.Size];
var readBuffer = await stream.ReadAsync(buffer.AsBuffer(), (uint)buffer.Length, InputStreamOptions.None);
var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("image.jpg", CreationCollisionOption.ReplaceExisting);
using (var fileStream = await file.OpenStreamForWriteAsync())
{
await fileStream.WriteAsync(readBuffer.ToArray(), 0, (int)readBuffer.Length);
}
}