我正在开发一个使用 Wacom Bamboo Slate
在画布上捕获实时笔触的应用程序。正在使用UWP
为C#
平台开发该应用程序。
在画布上绘制后,将执行save feature
。我正在使用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的定义,并且找不到可访问的扩展方法InkPresenter接受类型为InkCanvas的第一个参数(您是否缺少using指令或程序集引用?)
答案 0 :(得分:0)
您是否考虑过:
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);
答案 1 :(得分:0)
上面提到的示例可以在here中找到。
该示例使用Microsoft软件包CanvasDevice
(版本1.6.0)的Microsoft.Graphics.Canvas
名称空间部分中的Win2D.UWP
。 UWP项目样本目标针对Windows 10的内部版本10240(最低10240)。
可以安装软件包Win2D.UWP
。
Win2D.UWP
并从Microsoft安装。请注意,Win2D.UWP
的最新版本于2018年5月17日更新为1.23.0版,要求目标平台为17134。
例如,在Win2D.UWP
的1.23版本和UWP项目属性中目标版本设置为10240的版本中,“错误列表”可能会显示以下错误消息:
This version of Win2D requires Windows SDK >= 10.0.17134.0, but TargetPlatformVersion is 10.0.10240.0.
可以在UWP项目属性中更改目标版本
PS:在InitializeComponent();
的{{1}}之后添加以下内容,以启用具有选择的输入设备类型的绘图:
MainPage.xaml.cs