在UWP.Access中保存图像时拒绝访问被拒绝。 (来自HRESULT的exception:0x80070005(E_ACCESSDENIED))

我正在使用Windows 10 SDK上的通用Windows应用程序在图像中识别的面上绘制矩形。

我正在使用Win2D编辑图片并在其上绘制矩形。 我能够从图片库中读取文件,但是当我尝试在编辑后保存图像时,会出现以下错误:

访问被拒绝。 (来自HRESULT的exception:0x80070005(E_ACCESSDENIED))

以下是我用于在图像上绘制矩形的方法:

private async void DrawRect() { CanvasDevice device = CanvasDevice.GetSharedDevice(); CanvasBitmap bitmap = null; CanvasRenderTarget offscreen = null; Windows.Storage.StorageFile photofile = await KnownFolders.PicturesLibrary.GetFileAsync("image.jpg"); if(photofile != null) { using (var stream = await photofile.OpenReadAsync()) { bitmap = await CanvasBitmap.LoadAsync(device, stream); } } if(bitmap != null) { offscreen = new CanvasRenderTarget(device, bitmap.SizeInPixels.Width, bitmap.SizeInPixels.Height, 96); using (var ds = offscreen.CreateDrawingSession()) { ds.Clear(Colors.Transparent); ds.DrawImage(bitmap); ds.DrawRectangle(25, 35, 270, 352, Colors.Blue,4); } var photoFile = await KnownFolders.PicturesLibrary.CreateFileAsync("image2.jpg", CreationCollisionOption.ReplaceExisting); if (photofile != null) { await offscreen.SaveAsync(photofile.Path); } //await offscreen.SaveAsync(photoFile.Path);*/ } } 

在屏幕的最后一行抛出exception.SaveAsync。

上述错误的堆栈跟踪是:

在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务),位于System.Runtime.CompilerServices.TaskAwaiter.GetResult()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务),在IdentifyFacesApp.IdentifiedFaces.d__5.MoveNext()

我已经设置了访问appmanifest文件中的图片文件夹的权限。

我是否需要设置一些其他权限才能将图像保存在磁盘中。

当我尝试将图像保存在任何其他位置时,会发生同样的错误。

尝试通过流访问该文件,而不是路径:

 var photoFile = await KnownFolders.PicturesLibrary.CreateFileAsync("image2.jpg", CreationCollisionOption.ReplaceExisting); if (photofile != null) { using (var stream = await photofile.OpenAsync(FileAccessMode.ReadWrite)) { await offscreen.SaveAsync(stream, CanvasBitmapFileFormat.Jpeg); } } 

在UWP中,如果您通过路径访问文件,在很多情况下您可能会获得拒绝访问 ,应该通过StorageFile完成。