svg viewbox分辨率限制

时间:2014-11-27 00:14:13

标签: svg viewport viewbox

我想知道svg元素的视图框是否有任何硬性限制。当我达到非常低的值时(比如当vb宽度大约为.002时)或非常大的firefox开始播放大约200000000宽度时,我看到奇怪的剪辑。

是否有规则,某个地方我可以找到当前的限制?

这里小提琴: var dim = 0.00002; http://jsfiddle.net/7v36sLj8/13/

你会看到从昏暗的开始发生有趣的事情,你可以减少10倍或增加10倍作为拟合。

感谢您的回答,我只是将最小/最大值作为最低公分母,现在似乎是ffox。 (感谢您的回答,Rob的回答也解释了为什么ffox在linux / osx上的门槛要低得多)。

2 个答案:

答案 0 :(得分:3)

规范要求浏览器支持单精度浮点数。鼓励浏览器使用双精度数进行某些计算,主要是矩阵变换,其中小小数通常很重要,但一般规则是标准C ++" float"数据类型。

来自http://www.w3.org/TR/SVG11/types.html#Precision

  

4.3实数精度

     

除非特定属性或属性另有说明,否则a的容量至少为单精度浮点数,并且范围(最小值)为-3.4e + 38F至+ 3.4e + 38F。 / p>      

建议对坐标系转换等操作执行更高精度的浮点存储和计算,以提供最佳精度并防止舍入误差。

     

符合高质量SVG观察者需要至少使用双精度浮点进行某些数值运算的中间计算。

这与您的问题有什么关系?

值0.002不应该成为问题。如果您需要精确的小数,那么像200000000这样的数字只会是一个问题。如果您的视图框是"200000000 200000000 0.002 0.002" - 换句话说,非常小的非常大的数字范围 - 那么浮点精度可能就是问题所在。但是,如果存在低精度大数或小数可以由浮点数精确编码的问题,那么浏览器就不符合规范。

可能是浏览器正在尝试平滑形状,但是会四舍五入到最近的用户单位,而不是四舍五入到最近的显示像素。你能把一个简单的例子放在一起,展示你所看到的具体问题吗?

答案 1 :(得分:3)

Firefox最初使用名为cairo的图形库来进行跨平台图形渲染。开罗只允许单位具有32位的定点二进制精度,因此Firefox在二进制点之前选择24位,在二进制分数中选择8位。因此,最大坐标为2 ^ 24,最小的增量为1/256。

Firefox一直在用更直接的平台渲染取代cairo,例如Windows上的Direct2D,如果你有一个支持硬件加速的图形芯片并且启用了硬件加速,那么现在优先使用cairo。平台库没有cairo范围限制,但似乎有自己的错误与大坐标。