我已经实现了一个当前只能处理整数值的绘图类。我想获得有关技术/机制的建议,以便处理浮点数。使用的库是GDI。
谢谢,
阿迪
答案 0 :(得分:4)
在某些时候,需要将它们转换为整数来绘制实际像素。
但是,一般来说,你不想要将每个浮点数转换为int,并绘制 - 你几乎肯定会弄得一团糟。相反,您需要/想要缩放浮点数,然后将缩放值四舍五入为整数。在大多数情况下,您需要使缩放系数变量,以便用户可以根据需要放大和缩小。
另一种可能性是让硬件处理大部分工作 - 您可以使用OpenGL(例如)渲染您的点,将它们留在内部作为浮点,并让驱动程序/硬件处理诸如缩放和转换之类的问题整数。这需要一个相当陡峭的成本预先(学习足够的OpenGL以使它做任何有用的事情),但也可以有相当可观的回报,例如快速,基于硬件的渲染,并使相对容易处理一些事情比如缩放和(如果你需要的话)能够像2D一样轻松地显示3D点。
编辑:(主要是对评论的回应):最终归结为:屏幕的分辨率低于浮点数的分辨率。例如,真正高分辨率的屏幕可能水平显示2048像素 - 这是11位分辨率。即使单个精度浮点数也具有大约24位的精度。无论你如何做,将24位分辨率降低到12位分辨率都会失去一些东西 - 通常是很多。
这就是为什么你几乎拥有来使你的缩放因子变量 - 所以用户可以选择缩小并以降低的分辨率查看整个画面,或者放大以查看一小部分高分辨率。
由于提到了亚像素分辨率:它确实有帮助,但只有小。它不会解决映射到单个像素的数千个不同的项目。
答案 1 :(得分:2)
这些float
值代表什么?我会假设他们是一些坐标。您需要了解两件事:
之后,这就成了将点缩放到合适的整数坐标(基于屏幕分辨率)的问题。
编辑:一个简单的公式将是:
X(dst) = X(src) * DPI(dst) / DPI(src)
答案 2 :(得分:0)
您必须将它们转换为整数,然后将它们传递给MoveTo()
和LineTo()
等函数。
答案 3 :(得分:0)
缩放。例如,将所有积分值乘以10.将浮点值乘以10.0,然后截断或舍入(您的选择)。现在情节正常。
这将为您的图表提供额外的精确度。只要记住图片时的比例因子。
否则在绘图之前将浮点数转换为int。
答案 4 :(得分:0)
您可以尝试使用GDI +代替GDI,它具有使用浮点坐标的函数。