是否可以将ShareMediaTask与图像一起保存在隔离存储上。我尝试通过应用下面给出的代码来实现相同的功能。但是当我运行代码时,当前页面会闪烁并返回到同一页面。
var shareMediaTask = new ShareMediaTask { FilePath = "isostore:" + LocalImagePath };
shareMediaTask.Show();
答案 0 :(得分:4)
抱歉,目前ShareMediaTask仅支持“已保存图片”文件夹的“相机胶卷”文件夹中的媒体库中的项目。这是出于安全原因。例如,如果您使用ShareMediaTask并与其他应用共享,则该应用永远不应该访问您应用的IsoStore。因此,ShareMediaTask目前不支持IsoStore文件路径。
以下是如何将图像保存到MediaLibrary已保存图片并使用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。
答案 1 :(得分:0)
我已完成以下代码:
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();
}
};