WPF动态光标

时间:2017-07-07 22:01:54

标签: c# wpf sharpdx direct2d

我正在WPF中创建一个矢量图形编辑器。我使用已使用SharpDX定制的D3DImage渲染图稿,以便将其与Direct2D一起使用。选择项目后,会在所选项目周围显示调整大小手柄。当用户将鼠标悬停在这些调整大小句柄上时,我希望光标发生变化,但它们在Direct2D中呈现,而不是WPF元素。我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

好吧,如果你要自己渲染D3DImage,你必须进行自己的命中测试。

如果您的几何体相对简单(框,圆,折线,而不是太多),您可以在鼠标移动事件处理程序中测试这些手柄形状。手动或通过使用例如FillContainsPoint D2D API。

或者,如果您没有像桌面出版那样做一些颜色非常敏感的事情,您可以用形状颜色编码调整大小手柄。使用蓝色通道的几个最低位(人眼对蓝色最不敏感),读取鼠标下的颜色,相应地将光标更改为蓝色值。

或者,您可以为渲染目标切换到DXGI_FORMAT_R16G16B16A16_UNORM(看起来像D2D支持该格式),这样您就可以为图像添加更多的每像素数据,而不会产生任何可见的伪像(使用每个像素的较低字节)色彩通道)。然而,这会使渲染变得复杂,您需要再进行一次传递,将纹理转换为WPF的A8R8G8B8。

P.S。我想知道你为什么不使用WPF元素呢? 2D矢量图形相当先进。您可以通过编程方式轻松创建/操作/填充/概述这些shapes(只需放置在canvas上),这样WPF将处理所有这些命中测试,渲染等等。