UWP (Windows 10 App) InkCanvas LoadAsync Error HRESULT E_FAIL 已从对 COM 组件的调用返回

UWP (Windows 10 App) InkCanvas LoadAsync Error HRESULT E_FAIL has been returned from a call to a COM component

我在作为 Windows 10 App 开发的 UWP 应用程序中使用 InkCanvas。我已成功将 JPG 格式的绘图保存到 LocalStorage。

我想将绘图加载到 InkCanvas 对象中,以便可以在 DataGrid 上选择和重新排列它。我遇到以下错误。

如有帮助,万分感谢

异常:

{System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component. at Windows.UI.Input.Inking.InkStrokeContainer.LoadAsync(IInputStream inputStream) at TICAppUWP.CoverPage.canvasFileNotes()}

保存:

StorageFolder storageFolder = await StorageFolder.GetFolderFromPathAsync(fileNotesFolderPath);

            string fileName = App._PreparedFor +"_"+ App._Date + "_PageID_" + App._CoverPageID;
            var file = await storageFolder.CreateFileAsync(fileName + ".jpg", CreationCollisionOption.ReplaceExisting);

            CanvasDevice device = CanvasDevice.GetSharedDevice();
            CanvasRenderTarget renderTarget = new CanvasRenderTarget(device, (int)myInkCanvas.ActualWidth, (int)myInkCanvas.ActualHeight, 96);

            using (var ds = renderTarget.CreateDrawingSession())
            {
                ds.Clear(Windows.UI.Colors.White);
                ds.DrawInk(myInkCanvas.InkPresenter.StrokeContainer.GetStrokes());
            }

            using (var fileStream = await file.OpenAsync(FileAccessMode.ReadWrite))
            {
                await renderTarget.SaveAsync(fileStream, CanvasBitmapFileFormat.Jpeg, 1f);
            }

加载:

StorageFolder storageFolder = await StorageFolder.GetFolderFromPathAsync(fileNotesFolderPath);
            string fileName = App._PreparedFor + "_" + App._Date + "_PageID_" + App._CoverPageID;
            var file = await storageFolder.GetFileAsync(fileName + ".jpg");

            StorageFile inkFile = await storageFolder.GetFileAsync(fileName + ".jpg");

            if (file != null)
            {
                Windows.Storage.Streams.IRandomAccessStream stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);

                using (var inputStream = stream.GetInputStreamAt(0))
                {
                    await myInkCanvas.InkPresenter.StrokeContainer.LoadAsync(stream);
                }

                stream.Dispose();
            }

UWP (Windows 10 App) InkCanvas LoadAsync Error HRESULT E_FAIL has been returned from a call to a COM component

请参考InkStrokeContainer document 将指定流中的所有InkStroke对象异步加载到InkStrokeContainer管理的InkStroke集合中。

但是您传递给 LoadAsync 方法的流是图像文件流而不是 InkStroke 集合流。所以它会抛出异常。

对于这种情况,您需要使用 SaveAsync 方法保存 InkStroke 流,而不是保存为图像文件。