【发布时间】: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();
}
【问题讨论】: