【问题标题】:How to fix this 'Missing assembly reference' error?如何修复此“缺少程序集引用”错误?
【发布时间】:2019-07-25 07:03:00
【问题描述】:

我正在开发一个应用程序,该应用程序使用 Wacom Bamboo Slate 在画布上捕捉实时笔触。该应用程序正在使用 C# 为 UWP 平台开发。在画布上绘制后,将实现保存功能。我使用this 供我参考。下面是代码和错误信息:

private async void BtnSave_Click(object sender, RoutedEventArgs e)
        {
            StorageFolder storageFolder = KnownFolders.SavedPictures;
            var file = await storageFolder.CreateFileAsync("sample.jpg", CreationCollisionOption.ReplaceExisting);

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

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

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

CS1061 'InkCanvas' 不包含 InkPresenter 的定义,并且找不到接受 InkCanvas 类型的第一个参数的可访问扩展方法 InkPresenter(您是否缺少 using 指令或程序集引用?)

【问题讨论】:

  • 我已经找出错误的原因,但不知道如何解决它。我用作参考的链接使用了 inkcanvas(Windows.UI.Xaml.Controls.InkCanvas 的一部分),而我正在使用的 inkcanvas 是 Wacom 提供的 SDK 的一部分(Wacom.UX.InkCanvas)。
  • 在 Visual Studio 中检查菜单“Project > Manage Nuget Packages”和“Project > Properties”。

标签: c# windows xaml uwp inkcanvas


【解决方案1】:

您是否考虑过:

RenderTargetBitmap rtb = new RenderTargetBitmap((int)inkCanvas.Width, (int)inkCanvas.Height, 96d, 96d, PixelFormats.Default);
rtb.Render(inkCanvas);

之后你可以:

JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rtb));
encoder.Save(fileStream);

【讨论】:

  • 没用。 RenderTargetBitmap 不包含带有 5 个参数的构造函数。
  • 我用过:public RenderTargetBitmap (int pixelWidth, int pixelHeight, double dpiX, double dpiY, System.Windows.Media.PixelFormat pixelFormat);,参考:docs.microsoft.com/en-us/dotnet/api/…
【解决方案2】:

上面提到的样本可以在here找到。

示例使用来自 Microsoft 的包 Win2D.UWP(版本 1.6.0)的 Microsoft.Graphics.Canvas 命名空间部分中的 CanvasDevice。 UWP 项目示例针对 Windows 10 的 build 10240(最低 10240)。

可以安装包Win2D.UWP

  • 使用菜单“项目 > 管理 Nuget 包”,或
  • 通过在“解决方案资源管理器”的 UWP 项目中选择上下文菜单“参考”。

    1. 选择“已安装”并卸载当前的 2D 图形渲染包(如果有)。
    2. 选择“浏览”,查找 Win2D.UWP 并安装来自 Microsoft 的那个。

请注意,Win2D.UWP 的最新版本更新于 5/17/2018 版本 1.23.0 要求目标平台为 17134。

例如,在 UWP 项目属性中使用 1.23 版 Win2D.UWP 和目标版本设置为 10240 的构建后,“错误列表”可能会显示以下错误消息:

This version of Win2D requires Windows SDK >= 10.0.17134.0, but TargetPlatformVersion is 10.0.10240.0.  

可以在 UWP 项目属性中更改目标版本

  • 选择菜单“Project > projectname Properties”,或
  • 通过从“解决方案资源管理器”中的 UWP 项目中选择上下文菜单“属性”。

PS:在MainPage.xaml.cs 中的InitializeComponent(); 之后添加以下内容以启用选择输入设备类型的绘图:

MyInkCanvas.InkPresenter.InputDeviceTypes = CoreInputDeviceTypes.Mouse | CoreInputDeviceTypes.Pen | CoreInputDeviceTypes.Touch;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    相关资源
    最近更新 更多