用于存储坐标的浮点数或整数

时间:2013-08-26 14:16:52

标签: c++ winapi image-processing mfc

我正在开发一个应用程序,它基本上与使用MFC的api在图像上绘制注释有关。 绘制这些注释所需的坐标保存在xml文件中。 它还可以在更改图像的缩放级别时处理注释的缩放。

问题是当缩放坐标时,立即结果是double或float,但我们将结果保存为整数,这会导致很多错误/偏差。

将坐标保存为xml中的float是否也很好,还可以在float上执行立即操作?

最后将其转换为整数,以便在需要很长的LineTo(),MoveTo()等api中使用。

对此提出任何建议或建议都会非常有帮助。

由于

2 个答案:

答案 0 :(得分:2)

我已经使用图形管道很长一段时间了。

对于涉及缩放的内容,我坚持要将所有数据存储为双精度数据。特别是当你计划从整数到浮点和浮点到整数。缩放时的误差要小得多。

将这些值存储在XML中与整数不同,没有任何害处。

此外,如今的CPU已针对浮点运算进行了优化。

答案 1 :(得分:0)

将坐标序列化为xml时,可以使用reinterpret_cast<int>将它们简单地保存为一个整数,其浮点数与浮点数相同。相反,在反序列化期间,使用reinterpret_cast<float>恢复原始数字。保存/加载这种方式不应该失去精确度。

就错误而言,解决方案很简单:不要保存为整数。保持浮动(我甚至会支持PhoenixX_2建议升级到双打),然后,在绘制时,将它们转换为临时的int变量。

编辑:请注意,如果您决定使用double而不是float,则需要在序列化期间考虑到这一点,因为双精度数为64位,而不是32位。您也可以将数字保存为人类 - 可读小数,这可能是最明显的方法。