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