我正在尝试使用以下代码将myCanvas的内容保存为库中的图像文件(对于Windows Phone 8.1,而不是Silverlight)。当我运行应用程序并调用SaveFileToPhone()时,它会抛出System.UnauthorizedAccessException。
我已经检查了Manifest文件中的Capabilities,它们看起来很好。我究竟做错了什么。我已经阅读了很多资源但找不到解决方案,请帮忙!
我还是个菜鸟,我尝试使用我在网上找到的代码。
public async void SaveFileToPhone()
{
var file = await KnownFolders.PicturesLibrary.CreateFileAsync("bug.jpeg", CreationCollisionOption.GenerateUniqueName);
var outStream = await file.OpenAsync(FileAccessMode.ReadWrite);
await SaveVisualElementToFile(myCanvas, file);
outStream.Dispose();
}
async Task SaveVisualElementToFile(FrameworkElement element, StorageFile file)
{
string fileName = "customphoto.jpg";
var renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(element, (int)element.Width, (int)element.Height);
var pixels = await renderTargetBitmap.GetPixelsAsync();
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
var encoder = await
BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream);
byte[] bytes = pixels.ToArray();
encoder.SetPixelData(BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Ignore,
(uint)element.Width, (uint)element.Height,
96, 96, bytes);
await encoder.FlushAsync();
}
}
- $ exception {System.UnauthorizedAccessException:访问被拒绝。 (来自HRESULT的异常:0x80070005(E_ACCESSDENIED))at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 在 ChoosersLaunchers8._1.PhotoChooser.d__1e.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 ChoosersLaunchers8._1.PhotoChooser.d__17.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.AsyncMethodBuilderCore.b__3(对象 国家) System.Threading.WinRTSynchronizationContext.Invoker.InvokeCore()} System.Exception {System.UnauthorizedAccessException的}
答案 0 :(得分:1)
您似乎打开了两次不允许的StorageFile。在调用SaveVisualElementToFile方法之前不要打开文件,因为您已经在该方法中打开文件。
此外,您不需要outstream.dispose,因为文件将在您的方法中使用“using”语句自动处理。