将图库中的照片添加到 wp8.1 中的联系人
Add photo from library to contact in wp8.1
在我的 windows phone 应用程序中,我试图创建一个新联系人并添加一张从相机拍摄的图像,但它似乎没有用。
无论我做什么,照片都是空白的。
它对我有用的唯一方法是使用我在资产文件夹中添加的图像(而不是来自相机),甚至尝试将图像添加到本地资产文件夹然后上传它 - 不起作用......
(没有错误,但是添加的联系人没有照片)
await contact.SetDisplayPictureAsync(stream.AsStream().AsInputStream());
这是我的代码:
当我从商店中获取选定的图像时,我将其保存到位图图像并使用其像素缓冲区。
public async void AddContact(string displayName, string mobile, string email, byte[] data)
{
var store = await ContactStore.CreateOrOpenAsync();
var contact = new StoredContact(store)
{
DisplayName = displayName
};
var props = await contact.GetPropertiesAsync();
props.Add(KnownContactProperties.Email, email);
props.Add(KnownContactProperties.MobileTelephone, mobile);
using (var stream = bitmap.PixelBuffer.AsStream())
{
await contact.SetDisplayPictureAsync(stream.AsInputStream());
}
await contact.SaveAsync();
}
请帮忙!
我正在做同样的事情来设置联系人的个人资料图片,但它不起作用。但是当我从存储文件中获取 IRandomAccessStream 时,它在这里工作就是我正在做的
var file = await folder.GetFileAsync("filename.jpeg"));
//Or you can get file direclty from localfolder
// var file = await ApplicationData.Current.LocalFolder.GetFileAsync("filename.jpeg");
using (Windows.Storage.Streams.IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
await contact.SetDisplayPictureAsync(fileStream);
}
await contact.SaveAsync();
编辑
如何使用媒体捕获将图片保存到本地存储。
ImageEncodingProperties imgFormat = ImageEncodingProperties.CreateJpeg();
//Save file to local storage
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
"MyPhoto.jpg", CreationCollisionOption.ReplaceExisting);
await mediaCapture.CapturePhotoToStorageFileAsync(imgFormat, file);
将图像保存到本地存储后,您可以从我这里获取图像
编辑 2
如果您正在使用文件打开选择器,您可以试试这个。
public async void ContinueFileOpenPicker(Windows.ApplicationModel.Activation.FileOpenPickerContinuationEventArgs args)
{
if (args.Files.Count > 0)
{
var filePath = args.Files[0].Path;
StorageFile file = await Windows.Storage.StorageFile.GetFileFromPathAsync(filePath);
using (Windows.Storage.Streams.IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
await contact.SetDisplayPictureAsync(fileStream);
}
}
在我的 windows phone 应用程序中,我试图创建一个新联系人并添加一张从相机拍摄的图像,但它似乎没有用。 无论我做什么,照片都是空白的。 它对我有用的唯一方法是使用我在资产文件夹中添加的图像(而不是来自相机),甚至尝试将图像添加到本地资产文件夹然后上传它 - 不起作用......
(没有错误,但是添加的联系人没有照片)
await contact.SetDisplayPictureAsync(stream.AsStream().AsInputStream());
这是我的代码:
当我从商店中获取选定的图像时,我将其保存到位图图像并使用其像素缓冲区。
public async void AddContact(string displayName, string mobile, string email, byte[] data)
{
var store = await ContactStore.CreateOrOpenAsync();
var contact = new StoredContact(store)
{
DisplayName = displayName
};
var props = await contact.GetPropertiesAsync();
props.Add(KnownContactProperties.Email, email);
props.Add(KnownContactProperties.MobileTelephone, mobile);
using (var stream = bitmap.PixelBuffer.AsStream())
{
await contact.SetDisplayPictureAsync(stream.AsInputStream());
}
await contact.SaveAsync();
}
请帮忙!
我正在做同样的事情来设置联系人的个人资料图片,但它不起作用。但是当我从存储文件中获取 IRandomAccessStream 时,它在这里工作就是我正在做的
var file = await folder.GetFileAsync("filename.jpeg"));
//Or you can get file direclty from localfolder
// var file = await ApplicationData.Current.LocalFolder.GetFileAsync("filename.jpeg");
using (Windows.Storage.Streams.IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
await contact.SetDisplayPictureAsync(fileStream);
}
await contact.SaveAsync();
编辑 如何使用媒体捕获将图片保存到本地存储。
ImageEncodingProperties imgFormat = ImageEncodingProperties.CreateJpeg();
//Save file to local storage
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
"MyPhoto.jpg", CreationCollisionOption.ReplaceExisting);
await mediaCapture.CapturePhotoToStorageFileAsync(imgFormat, file);
将图像保存到本地存储后,您可以从我这里获取图像
编辑 2 如果您正在使用文件打开选择器,您可以试试这个。
public async void ContinueFileOpenPicker(Windows.ApplicationModel.Activation.FileOpenPickerContinuationEventArgs args)
{
if (args.Files.Count > 0)
{
var filePath = args.Files[0].Path;
StorageFile file = await Windows.Storage.StorageFile.GetFileFromPathAsync(filePath);
using (Windows.Storage.Streams.IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
await contact.SetDisplayPictureAsync(fileStream);
}
}