2010-02-12 88 views
1

我已经实现了一个绘图类,它目前只能处理整数值。我想获得有关技术/机制的建议以处理浮动数字。使用的库是GDI。绘制真实坐标

感谢,

阿迪

+0

GDI?呃..这真的很老.. – Macke 2010-02-14 14:25:33

回答

4

在某些时候,它们需要转换为整数来绘制实际像素。

但是,一般来说,你做而不是只想将每个float转换为int,然后绘制 - 你几乎肯定会弄得一团糟。相反,您需要/想要缩放浮点数,,然后将缩放值四舍五入为整数。在大多数情况下,您会希望使缩放因子可变,以便用户可以根据需要放大和缩小。

另一种可能性是让硬件处理大部分工作 - 您可以使用OpenGL(举一个例子)渲染你的点,把它们作为内部浮点,让驱动程序/硬件处理像缩放转换为整数。这有一个相当陡峭的成本预先(学习足够的OpenGL,以使它做任何有用的事情),但也可以有相当可观的回报,如快速,基于硬件的渲染,并使它相对容易处理一些事情像缩放和(如果您需要它)能够像2D一样容易地显示3D点。

编辑:(主要是对评论的回应):最终归结为:屏幕的分辨率低于浮点数的分辨率。例如,真正高分辨率的屏幕可能会水平显示2048个像素 - 这是11位分辨率。即使是单精度浮点数也有大约24位的精度。不管你怎么做,将24位分辨率降低到12位分辨率都会失去一些东西 - 通常是lot

这就是为什么你几乎有让你的比例因子可变 - 所以用户可以选择是否缩小,以降低分辨率看到整个图片,或放大看到一个高分辨率的小部分。

由于提到了子像素分辨率:它确实有帮助,但只有一个。这不会解决映射到单个像素的上千种不同的项目。

+0

酷这是一个很好的答案。是的,我可以使用DirectDraw,因为我有一些经验,但如果我想手动缩放它,你会如何做一个值例如35.78? 如果我有一个比例系数1.2缩放,这将是35.78 * 1.2 = 42.936所以让我们说,我将它送到43.但是,当我想刻度值35.8会发生什么?用相同的比例因子再次提供43.解决方案如何? 感谢 – Adi 2010-02-12 19:28:10

+0

@Adi:如果你想用抗锯齿,或WPF或类似的子像素分辨率利用OpenGL/D3D来绘制。 – Macke 2010-02-14 14:24:47

0

你必须将它们转换为整数,然后将它们传递给函数一样MoveTo()LineTo()

2

这些float值代表什么?我会假设他们是一些协调员。你需要知道两件事情:

  • 源分辨率(即在这些坐标绘制的DPI)
  • ,你需要的范围,以解决

之后,这成为一个问题,将点转换为合适的整数坐标(根据您的屏幕分辨率)。

编辑:一个简单的公式将是:

X(dst) = X(src) * DPI(dst)/DPI(src)

0

比例。例如,将所有积分值乘以10.将浮点值乘以10.0,然后截断或舍入(您的选择)。现在情节正常。

这会给你在图形上额外的精确度。请记住看图片时的比例因子。

否则转换彩车绘制之前为int。

0

你可以尝试使用GDI +,而不是GDI,它有使用浮动坐标功能。