在 UWP.Access 中保存图像时访问被拒绝。 (HRESULT 异常:0x80070005 (E_ACCESSDENIED))
Access denied while saving image in UWP.Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
我正在 Windows 10 SDK 上开发通用 windows 应用程序,以便在图像中识别的面部上绘制矩形。
我正在使用 Win2D 编辑图片并在其上绘制矩形。我能够从图片库中读取文件,但是当我在编辑后尝试保存图像时出现以下错误:
Access is denied. (Exception from HRESULT: 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);*/
}
}
最后一行抛出异常offscreen.SaveAsync.
上述错误的堆栈跟踪是:
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at 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 来完成.
我正在 Windows 10 SDK 上开发通用 windows 应用程序,以便在图像中识别的面部上绘制矩形。
我正在使用 Win2D 编辑图片并在其上绘制矩形。我能够从图片库中读取文件,但是当我在编辑后尝试保存图像时出现以下错误:
Access is denied. (Exception from HRESULT: 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);*/
}
}
最后一行抛出异常offscreen.SaveAsync.
上述错误的堆栈跟踪是:
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult() at 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 来完成.