我正在开发一个应用程序,它基本上与使用MFC的api在图像上绘制注释有关。 绘制这些注释所需的坐标保存在xml文件中。 它还可以在更改图像的缩放级别时处理注释的缩放。
问题是当缩放坐标时,立即结果是double或float,但我们将结果保存为整数,这会导致很多错误/偏差。
将坐标保存为xml中的float是否也很好,还可以在float上执行立即操作?
最后将其转换为整数,以便在需要很长的LineTo(),MoveTo()等api中使用。
对此提出任何建议或建议都会非常有帮助。
由于
答案 0 :(得分:2)
我已经使用图形管道很长一段时间了。
对于涉及缩放的内容,我坚持要将所有数据存储为双精度数据。特别是当你计划从整数到浮点和浮点到整数。缩放时的误差要小得多。
将这些值存储在XML中与整数不同,没有任何害处。
此外,如今的CPU已针对浮点运算进行了优化。
答案 1 :(得分:0)
将坐标序列化为xml时,可以使用reinterpret_cast<int>
将它们简单地保存为一个整数,其浮点数与浮点数相同。相反,在反序列化期间,使用reinterpret_cast<float>
恢复原始数字。保存/加载这种方式不应该失去精确度。
就错误而言,解决方案很简单:不要保存为整数。保持浮动(我甚至会支持PhoenixX_2建议升级到双打),然后,在绘制时,将它们转换为临时的int变量。
编辑:请注意,如果您决定使用double而不是float,则需要在序列化期间考虑到这一点,因为双精度数为64位,而不是32位。您也可以将数字保存为人类 - 可读小数,这可能是最明显的方法。