gpt4 book ai didi

c# - win2D uwp 不会在 inkcanvas 中保存高亮笔画

转载 作者:行者123 更新时间:2023-11-30 16:49:36 25 4
gpt4 key购买 nike

我正拼命尝试将突出显示笔画保存为 png。我正在使用 win2d for UWP 来完成这项工作。它适用于 100% 不透明度的笔画,但当我设置 DrawAsHighlighter = true; 时,保存的 png 为空,完全透明。

这是我的代码:

    private void SetHighLight()
{
InkDrawingAttributes attributes = new InkDrawingAttributes();
attributes.DrawAsHighlighter = true;
attributes.PenTip = PenTipShape.Rectangle;
attributes.Size = new Size(4, 10);
attributes.Color = currentColor;
SetAttribute(attributes);
}

private void GetCanvasRender(out CanvasRenderTarget renderTarget)
{
CanvasDevice device = CanvasDevice.GetSharedDevice();
renderTarget = new CanvasRenderTarget(device, (int)ink.ActualWidth, (int)ink.ActualHeight, 96);
using (var ds = renderTarget.CreateDrawingSession())
{
ds.Clear(Colors.Transparent); //I already tried to delete this but it doesn't change anything
ds.DrawInk(ink.InkPresenter.StrokeContainer.GetStrokes());
}
}

private async void SavePicture()
{
CanvasRenderTarget renderTarget;
Image img = new Image();

GetCanvasRender(out renderTarget);
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile noteFile = await storageFolder.CreateFileAsync(i.ToString() + ".png", CreationCollisionOption.ReplaceExisting);
using (var fileStream = await noteFile.OpenAsync(FileAccessMode.ReadWrite))
await renderTarget.SaveAsync(fileStream, CanvasBitmapFileFormat.Png, 1f);
img.Source = new BitmapImage(new Uri(storageFolder.Path + "/" + i++ + ".png"));
img.VerticalAlignment = VerticalAlignment.Stretch;
ContainerCanvas.Children.Add(img);
Canvas.SetTop(img, ScrollViewerContainer.VerticalOffset);
Canvas.SetZIndex(img, 5);
}

我读过这可能是因为高亮显示没有出现在可视化树中,但我真的不确定。

顺便说一下,当我尝试更改颜色的不透明度时 (attributes.Color = Color.FromArgb(128, 255, 0, 0)),inkcanvas 不应用 alpha , 为什么 ?我错过了什么吗?

最佳答案

您不能将 DrawAsHighlighter 墨迹保存为 .png 等位图格式 - 从根本上说,这不是一个值得尝试的有意义的操作。

常规的非荧光笔墨水是使用标准的 alpha 混合绘制的,因此将这些墨水形状写入位图格式是合理的。稍后您可以将该位图混合到其他一些背景图像上,并获得与直接在该背景上绘制墨水一样的结果。

然而,对于荧光笔墨水,“混合背景”是一个更复杂的操作,而不仅仅是标准的来源混合。因此,不存在仅包含这种墨水的位图图像之类的东西 - 您还必须提供背景以便执行适当的混合。

这里有三个选项:

  1. 不要使用荧光笔墨水模式。
  2. 不要将墨迹保存为位图图像,而是保存原始墨迹笔划数据,然后使用墨迹 API 将这些笔划直接混合到它们的最终位置。
  3. 在同一位图中包含背景和墨迹笔划。

关于c# - win2D uwp 不会在 inkcanvas 中保存高亮笔画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36397638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com