【问题标题】:UWP (Windows 10 App) InkCanvas LoadAsync Error HRESULT E_FAIL has been returned from a call to a COM componentUWP(Windows 10 应用程序)InkCanvas LoadAsync 错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回
【发布时间】:2021-12-27 13:23:13
【问题描述】:

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

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

如果您能提供帮助,非常感谢。

例外:

{System.Runtime.InteropServices.COMException (0x80004005):对 COM 组件的调用已返回错误 HRESULT E_FAIL。 在 Windows.UI.Input.Inking.InkStrokeContainer.LoadAsync(IInputStream inputStream) 在 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();
            }

【问题讨论】:

    标签: xaml uwp


    【解决方案1】:

    UWP(Windows 10 应用)InkCanvas LoadAsync 错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回

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

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

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

    【讨论】:

    • 感谢您的宝贵意见。正如你所说,我得到了 StrokeContainer 集合的解决方案。
    猜你喜欢
    • 2018-03-17
    • 2023-03-15
    • 2016-12-12
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多