是否可以将 ShareMediaTask 与保存在隔离存储上的图像一起使用。我尝试通过应用下面给定的代码来实现相同的功能。但是当我运行代码时,当前页面会闪烁并返回到同一页面。
var shareMediaTask = new ShareMediaTask { FilePath = "isostore:" + LocalImagePath };
shareMediaTask.Show();
是否可以将 ShareMediaTask 与保存在隔离存储上的图像一起使用。我尝试通过应用下面给定的代码来实现相同的功能。但是当我运行代码时,当前页面会闪烁并返回到同一页面。
var shareMediaTask = new ShareMediaTask { FilePath = "isostore:" + LocalImagePath };
shareMediaTask.Show();
抱歉,目前 ShareMediaTask 仅支持在“已保存图片”文件夹的“相机胶卷”文件夹中的媒体库中的项目。这样做是出于安全原因。例如,如果您使用 ShareMediaTask 并与另一个应用程序共享,则该应用程序永远不应访问您应用程序的 IsoStore。因此,ShareMediaTask 目前不支持 IsoStore 文件路径。
这是如何将图像保存到 MediaLibrary Saved Pictures 并使用 ShareMediaTask @ http://www.reflectionit.nl/Blog/PermaLink620a4c87-a4af-4007-b4bc-81d851b11658.aspx的端到端代码示例
private void ButtonShare_Click(object sender, RoutedEventArgs e) {
var bmp = new WriteableBitmap(this.ContentPanel, null);
var width = (int)bmp.PixelWidth;
var height = (int)bmp.PixelHeight;
using (var ms = new MemoryStream(width * height * 4)) {
bmp.SaveJpeg(ms, width, height, 0, 100);
ms.Seek(0, SeekOrigin.Begin);
var lib = new MediaLibrary();
var picture = lib.SavePicture(string.Format("test.jpg"), ms);
var task = new ShareMediaTask();
task.FilePath = picture.GetPath();
task.Show();
}
}
您还可以将图片保存到相机胶卷文件夹中,并使用 MediaLibrary.SavePictureToCameraRoll() 扩展方法使用 ShareMediaTask。
我已经完成了以下代码:
BitmapImage bi = new BitmapImage(new Uri(string.Format("Data/{0}/{1}", Category, img), UriKind.Relative)));
bi.CreateOptions = BitmapCreateOptions.BackgroundCreation;
bi.ImageOpened += (s1, e1) =>
{
var bmp = new WriteableBitmap(bi);
var width = (int)bmp.PixelWidth;
var height = (int)bmp.PixelHeight;
using (var ms = new MemoryStream(width * height * 4))
{
bmp.SaveJpeg(ms, width, height, 0, 100);
ms.Seek(0, SeekOrigin.Begin);
var lib = new MediaLibrary();
Picture picture = null;
try
{
picture = lib.SavePicture(string.Format("test.jpg"), ms);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
var task = new ShareMediaTask();
task.FilePath = picture.GetPath();
task.Show();
}
};