问题标签 [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 投票
0 回答
753 浏览

wpf - WPF 在 DrawingVisual 中裁剪图像源

我需要在 DrawingVisual 中显示图像源的裁剪区域,但在过去的几个小时里,我只是为应该是一项简单的任务绘制了空白。

我的计划是实现定时动画(用于 HMI 系统),它将拍摄包含各种帧的大图像。根据状态变量,DrawingVisual 将从这个大图像中提取要显示的当前帧 - 因此需要裁剪。

我的代码如下:

但是,在创建裁剪图像后,我收到

“值不在预期范围内”

顺便说一句,该图像是在资源字典(在当前程序集中)中加载的 png 为

然后使用 (ImageSource)FindResource("...

首先,我不理解错误消息,在任何地方都找不到令人满意的解释,其次,为什么执行一个简单的任务这么难?

谢谢你的帮助。

ps 我认为这是由于无法找到资源。但是,如果原始图像源很好,为什么克隆版本的行为会有所不同?pps 删除“bm.BaseUri = ...”行会导致相同的错误。

为了简化事情,我创建了一个测试项目,它只有一个按钮,单击时会尝试创建 CroppedBitmap。

按钮点击 =

资源字典引用位图:

并包含 App.xaml

BitmapSource (i) 有效并且对 CroppedBitmap 的调用会引发 ArgumentException,“值不在可接受的范围内”。

创建或尝试创建裁剪图像肯定不会比这更简单吗?

另一个我从 MSDN 上取下的例子

新的 CroppedBitmap 再次抛出 InvalidArgument 异常

有什么想法吗?

谢谢

0 投票
0 回答
234 浏览

wpf - WPF Canvas,框架元素有红色边框

我正在使用画布来承载各种框架元素。每个框架元素本身都是 DrawingVisual 的宿主。

在设计时添加的每个框架元素在运行时在画布中看起来都很好(即如预期的那样)。

对于那些在运行时添加的框架元素(canvas.children.add(new myframework...),它们都有一个红色边框。我强调我绝对没有绘制这个边框 - 我什至删除了所有绘图指令和每个控件仍然有一个红色边框。如果我重新引入绘图指令,这个红色边框会出现在我的绘图上方,所以它似乎是 WPF 正在做的事情。

不涉及 XAML - 它只是一个承载 Canvas 的 UserControl,并且在此画布上添加了框架元素。控件都包含在画布的边界内,并且不重叠。

有人可以解释为什么会出现这个边界以及如何摆脱它。

谢谢

0 投票
1 回答
184 浏览

c# - 显示 VisualCollection 和 UIElements

我正在使用 VisualCollection 在 WPF 中的 Canvas 上显示自定义 DrawingVisuals,并且我还需要画布来显示几个 UIElements。问题是画布在使用 VisualCollection 时似乎忽略了它的常规子级。UIElements 在放置在 VC 中时也不会出现。

我希望 UIElements 呈现在 DrawingVisuals 之上,所以我不能(?)将 DV 放在 AdornerLayer 中。有任何想法吗?

0 投票
1 回答
1958 浏览

c# - WPF中RenderTargetBitmap中图像的宽度和高度

使用我正在绘制的以下代码,DrawingVisual然后将其渲染为Imageusing RenderTargetBitmap。最后Image添加到 aCanvas并显示在屏幕上。

我的问题是方法想要的pixelWidthandpixelHeight参数。RenderTargetBitmap我应该赋予它什么价值?我注意到,如果我给它较低的数字,则不会渲染图像的部分。我应该根据什么来选择这些?我在下面的代码中给了它 1000。

0 投票
1 回答
307 浏览

c# - 更改在 DrawingVisual 上绘制的本地类的属性

我已经定义了一个Drawing派生自FrameworkElement. 我正在使用它来绘制DrawingVisual. 在我XAML的课程中,我已经包括了这个本地课程。

现在我的问题是如何将此类的属性绑定到变量,或者我什至如何更改它们?

例如,假设我想更改width属性。我Button在我的上面加上了一个XAML并试图改变width但没有任何反应。

所有必需的代码如下:

0 投票
1 回答
1005 浏览

c# - DrawingVisual 上的位图缓存部分模糊

最近我切换到DrawingVisuals提高趋势图的性能(尤其是缩放和平移)。

这是我的代码:

这是ImprovedDrawingVisual

现在,几何图形确实有Transforms,这可能很重要。

发生的情况是,在没有位图缓存(1 px 线)的情况下,图表绘制得很好,但是当我打开位图缓存时,图表的某些部分有时会变得模糊。

模糊的线条

有谁知道我该如何解决这个问题?我尝试更改RenderAtScaleDrawingVisual关闭EdgeMode设置,但这无济于事。

编辑:省略画笔填充几何图形以避免混淆,因为它在这里不相关。

0 投票
0 回答
138 浏览

c# - 仅为所需的 Canvas Size 将 Canvas 保存到 BMP

我有一个画布,里面有不同的物体,可以移动..

然后我想将画布保存到 BMP 或 PNG .. 没问题,它可以工作。

但是如果画布之外有一些对象,输出图像将具有所需的画布大小,但在外部元素内。

我想准确地打印所需的尺寸,不多也不少.. :)

我认为这是一个衡量和安排问题,但不知道它是如何工作的..

遵循代码和“错误图像导出”的示例图像!

所有在垂直白线的右侧不应该出现在图片上!

在此处输入图像描述

0 投票
0 回答
737 浏览

.net - 在 WPF 中绘制线条 - DrawingVisual 性能问题

我已经实现了两个版本的线条绘制代码 - 一个使用 WPF 形状(线条),另一个使用 StreamGeometry 和 DrawingVisual。

DrawingVisual 应该更快,但我发现正好相反。包含 DrawingVisual 对象的主机窗口的初始绘制和随后调整大小非常缓慢且不稳定,比 WPF 线条示例差得多。

我究竟做错了什么?

WPF 行代码:

绘图视觉代码:

绘图可视化宿主控件:

将 VisualHost 分配给网格:

0 投票
0 回答
1024 浏览

c# - RenderTargetBitmap : 无法释放/处置句柄

对不起,我的英语不好。

我想将 DrawingVisual 渲染为位图,以便创建 DiffuseMaterial。我这样做:

但...

  • 如果我使用 GetDiffuseMaterial 方法 10000 次,应用程序就会停止。这是“正常的”,因为每个应用程序最多可以有10000 个 GDI 句柄,而 RenderTargetBitmap 每次创建时使用 1 个 GDI 句柄。
  • 解决此问题的方法是释放 RenderTargetBitmap 对象。但我没来得及做。我试过这个(在 mat.Freeze() 和 return mat; 之间):

    /li>
  • 另一种方法是只有一个 RenderTargetBitmap 并将其作为参数提供给 GetDiffuseMaterial。
    但是如果我调用两次 GetDiffuseMaterial,我将有两个相同的材质,因为句柄是共享的,材质采用最后修改。(所以即使文本参数不一样!)

我看不到用 RenderTargetBitmap 做我想做的另一种方法。
注意:GetDiffuseMaterial 可以调用 100 万次...

RenderTargetBitmap 是我发现从字符串文本创建 DiffuseMaterial 的最快方法。其他技术真的很慢:使用带有 TextBlock 的 VisualBrush,使用 DrawingBrush,... 例如:使用 RenderTargetBitmap 对 GetDiffuseMaterial 的 5000 次调用至少比其他技术快 10 倍。

谢谢您的帮助。

0 投票
1 回答
625 浏览

c# - 如何在 DrawingVisual 中用毫米单位而不是像素绘制一些东西?

我试图在 a 中画一些东西,System.Windows.Media.DrawingVisual但我需要以毫米为单位画薄。我怎样才能做到这一点?