2010-10-24 25 views
3

当在WPF中渲染巨大的视觉效果时,视觉会随着坐标的增加而变形并扭曲。我认为它与渲染管道中使用的浮点数据类型有关,但我不完全确定。无论哪种方式,我正在寻找解决问题的实用解决方案。不赞成渲染巨大的WPF视觉效果 - 任何解决方案?

为了演示我在说什么,我创建了一个示例应用程序,它只包含嵌入ScrollViewer中的自定义控件,该控件绘制正弦曲线。

alt text

你可以在这里看到,图纸是不行了双重价值< = 2^24(在这种情况下,水平坐标值),但是从它这一点被扭曲。

alt text

失真得到在2^25恶化等失真继续增加每增加一点,直到它只是得出了一些垂直线。

由于性能方面的原因,我只画出了图形的可见部分,但出于布局的原因,我不能“虚拟化”使这个问题过时的控件。我能想到的唯一解决方案是将图形的可见部分绘制到位图上,然后在适当的位置渲染位图 - 但在那里我再次遇到大值的精度问题,因为我无法准确放置位图在我需要的位置。

有没有人有一个想法如何解决这个问题?

回答

0

这不是WPF的错。

浮点数的精度越来越低,它们的值越来越远 - 这是将大量数据范围(-Inf,+ Inf)填充到32位(浮点)/ 64位(双精度)数据空间的代价。在2^30左右,浮点数实际上比整数要少。

64位整数具有恒定的间隔(1),但具有有限的范围-9,223,372,036,854,775,808到+9,223,372,036,854,775,807。

您也可以考虑使用十进制类型(但也具有有限的数值范围)。

+0

谢谢,但我从来没有说过它是WPF的错 - 我只是在寻找解决方法。我熟悉浮动和整数是如何工作的,因此我猜想这可能是问题所在。我从2^24开始就遇到了精度问题,并且我记得曾经在某处读过实际的硬件渲染发生在单精度上......但切换到软件渲染器并没有什么区别。我也不能考虑使用Decimal类型,因为WPF API使用double,所以这是我必须坚持的。 – 2010-10-24 19:20:27

相关问题