问题标签 [drawingvisual]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
216 浏览

c# - 尝试学习 DrawingVisual 和 StreamGeometry

在我的应用程序中,我必须绘制一条包含很多点的线(如果需要,最多可达 100.000)。最初我使用的是折线,但对于大量的点来说这太慢了。

我一直在做一些阅读并来到 DrawingVisual 和 StreamGeometry 但是它不起作用。

我遵循了一个简单的教程并创建了以下类:

我需要的线的所有点都在名为 Punten 的 PointCollection 中。然后我尝试将此 FrameworkElement 添加到我的画布中。

其中“ActieveCanvas”是画布。

有关信息:所有点都是画布内(相对于)的 X、Y 坐标。

我究竟做错了什么?

0 投票
1 回答
350 浏览

c# - 图像模糊效果:保存前后效果不同

我的图像编辑器中有一个带有模糊工具的错误。

当我选择矩形来设置模糊效果时,当我应用时,结果有点不同,请参阅:

在此处输入图像描述 在此处输入图像描述

要创建“之前”,我会:

要创建“之后”,我会:

当我使用模糊半径时,它有时与两个图像有很大不同。

为什么不一样?

0 投票
3 回答
3583 浏览

c# - 如何将图像转换为图像源

我什至不知道我是否问对了问题;所以提前道歉。我正在将一些 PNG 写入画布,并且我还想同时将这些 PNG 复制到位图。我希望 PNG 出现在位图上与画布上相同的位置。

这是代码片段:

但是,它会在此行引发错误“无法从'System.Windows.Controls.Image'转换为'System.Windows.Media.ImageSource':

如果我能以某种方式将图像转换为 ImageSource,这个错误会得到解决吗?或者我做错了?

谢谢!

0 投票
2 回答
360 浏览

wpf - WPF 键盘事件不会为仅具有视觉效果的 FrameworkElement 子类触发

我创建了一个包含 Visuals 集合的 FrameworkElement 子类:

我使用以下代码在 XAML 中显示此元素:

我已经尝试了我能想到的一切,但我就是无法触发 KeyDown 事件。我在网上找到的最常用的评论与焦点有关。我已经尝试了 Focusable="True" 和调用 this.Focus() 的所有组合,但没有任何效果。

任何人都知道如何做到这一点?谢谢!

0 投票
3 回答
1842 浏览

wpf - Windows 更新 KB4040972/73 导致带有 WPF 类的黑色图像

我有一个应用程序依赖于我们使用 DeepZoomTools.dll 的深度缩放图像(从 PNG 转换为各种比例的 JPG 金字塔)。这依赖于 PresentationCore.dll 并且多年来一直运行良好。

在推出 KB4040972 和 KB4040973 之后,从 PNG 到 JPG 的转换会生成(取决于坐标)黑色图像,而不是它应该包含的图像。

如果以下代码在控制台或桌面应用程序中运行,则它可以工作。

只有在高权限系统帐户下运行(例如,来自任务调度程序)时,它才不起作用。

我创建了一个项目来重现该问题,代码如下:

有什么线索吗?

0 投票
0 回答
212 浏览

c# - WPF DrawingVisual中跟踪DrawingVisual的方案

我正在 WPF 中创建一个 CAD 程序,用于添加和删除线条和矩形,这两者都由 PathGeometry 描述。当我进一步了解该程序时,它将包含大量不同的 PathGeometries,每个 PathGeometries 都构成了各个 DrawingVisuals 的属性。出于性能原因,我使用 Visual 类。

由于每个 DrawingVisual 实际上是相同的,因为它只是一个由 PathGeometry 组成的 DrawingVisual,它没有唯一标识符。我需要某种标识符,这样当我右键单击一条线或矩形时,我可以在其上绘制一些句柄,以便使用鼠标对其进行修改。(我希望线的端点是可移动的,矩形是可拉伸的,等等。)有关于 Lines、Bezier 曲线等的句柄线的示例,但它们不处理具有不同的问题类型。

在下面的代码中,就像我的一样,鼠标点击检索drawingVisual对象。但是,由于drawingVisuals 上没有任何特殊功能,即“这是一个矩形”或“这是一条线”,我需要找出一种从HitTestResult 结果中获取该信息的方法。知道了这一点,当我想修改它时,我可以确定如何处理它。一条线将有 2 个控制点,一个矩形将有 4 个,而我的一些其他(尚未制作)几何图形将有 6 个或更多控制值。

当我以调试模式(通过 Debug>Window 访问)进入 visualTree 时,它​​只显示“DrawingVisual”。这些信息不足以知道如何将其视为一条线或一个矩形。

因此,在大型 CAD 程序中,它们允许您修改单击的对象。该软件有某种方式知道您点击了什么,我希望在我的初学者级 CAD 程序中拥有该功能。

我尝试使用调试功能并寻找某种唯一标识符,但找不到。我考虑过使用 List 并在创建每个项目时给出它,但我无法将它与 HitTestResult 结果链接起来。

可以做到,所以这不是问题,但我需要一个方案来模仿 CAD 程序如何完成此功能。

告诉我如何去做的任何帮助将不胜感激。基本上,高性能 CAD 程序使用什么方案来跟踪鼠标点击的 Visual 类型是什么?

TYIA

0 投票
3 回答
230 浏览

c# - 对象层次结构中的层次结构更改通知

我在 C# 库中有三种对象的递归层次结构。我们称它们为BoxesNuts and BoltsBoxes可以包含其他BoxesNuts and BoltsNuts and Bolts显然不能包含任何东西。

假设每个Box都有BoxNutBoltObservableCollections。每个Nut and Bolt实现INotifyPropertyChanged

是否有公认的最佳实践将可观察集合的更改通知或任何NutBolt上的属性更改传播到包含对最顶层Box的引用的对象?或者您会推荐任何特定的设计模式?

编辑:为了给这个问题提供一些背景信息,我领导了Chemistry for Word项目。您可以在左侧看到实时显示结构的组件。Chem4Word 导航器 现在,不管你信不信,这目前通过数据绑定来绘制所有内容。LHS 上显示的每个分子都是一个 ItemsControl。(是的,我正在将 WPF 与 MVVM 一起使用!)事实证明,这对于长期解决方案来说开销太大且缺乏灵活性。所以我又回到了直接生成DrawingVisuals。这种方法允许更精细的控制。我最初的例子中的盒子螺母螺栓是分子原子债券。如果添加、删除或更改其中任何一个,则显示器必须知道它,以便它可以更新。因为我已经实现了数据绑定的接口和对象,所以我想利用我已经拥有的代码。

0 投票
1 回答
139 浏览

c# - 如何计算 DropShadowEffect 的大小?

我正在尝试获取图像并对其应用阴影并另存为图像。

到目前为止,在不使用第三方解决方案的情况下,唯一的方法是使用DropShadowEffectin a DrawingVisual

我不知道检测给定的所有边的确切像素偏移所需的数学DropShadowEffect

有没有内置的方法来测量它,还是我应该手动测量?怎么可以手动完成?

0 投票
0 回答
73 浏览

c# - 如何将 WPF FrameworkElements 和 DrawingVisuals 添加到同一画布

我正在构建一个简单的 CAD 程序。出于速度目的,我使用的是 DrawingVisuals。为了促进这一点,我创建了一个继承自 Canvas 的自定义 Canvas 类。我在这个类中覆盖了 VisualChildrenCount 和 GetVisualChild

我在我的应用程序的 ScrollViewer 控件中显示此画布。我的问题是我还希望能够将不同的 FrameworkElements 添加到我的画布中。我试过在我的画布代码中做这样的事情:

但我的画布上什么也没有。如果我注释掉视觉覆盖,它可以正常工作并将文本框添加到我的画布中。我在这里错过了什么吗?我是否需要重写其他方法才能让 FrameworkElements 工作?我不应该将 FrameworkElement 添加到 Children 集合并将其添加到视觉对象吗?

谢谢

0 投票
1 回答
135 浏览

wpf - 如何以编程方式调整 DrawingVisual 的大小?

所以,我是 WPF 绘图的新手。出于性能原因,我不得不从 ContentControl 和 UserControl 等常规控件切换到更轻量级的元素,例如 DrawingVisual。我正在开发一个图表应用程序,它可能在画布上最多有 1000 个元素,可以拖动、调整大小等。首先,使用 DrawingVisual 代替 Shape 更好吗?其次,我的主要问题在这里。我正在向 Canvas 添加 DrawingVisual 元素,如下所示:

在画布内:

如何通过代码动态增加 Rectangle 的大小?我尝试设置 Rectangle 的高度和宽度,但它不起作用,使用了 ScaleTransform,但这可能不是我想要的。我需要重新绘制矩形吗?谢谢!