4

是否canvas能够处理double诸如此类的数字0.5, 10.4?或者这是否会在内部四舍五入为整数(如果是,如何?)。

我问是因为我认为画布上的元素表示为像素。

而且由于像素始终是大小1x1(如果我错了,请纠正我),如果我double向画布函数而不是提供值,是否有更准确的绘图的优势integer

4

2 回答 2

1

分数坐标是可能的,因为浏览器可以使用它们在像素级别上插值。对于轮廓,这会产生抗锯齿,而对于内部像素,这种插值可能会使事情变得有点模糊。特别是如果您的对象不是由单个像素形成,而是由相当平滑的东西(例如圆形)形成,那么由于我们感知反像素的方式,在子像素级别渲染可以给用户一个比实际物理可能分辨率更高的印象-别名轮廓。

但是正如raina77ow在对您的问题的评论中所说的那样,这是以浏览器增加工作为代价的,这会导致性能下降。所以我会使用这些准则来做出决定:

  • 如果要绘制的东西是由像素区域组成的,所有的填充都是相同的颜色,并且相邻区域之间的对比度很高,那么我会使用整数坐标,因为双坐标会导致模糊,这可能看起来很糟糕。
  • 如果你只画一些东西而不经常,并且需要几何精度,那么使用双坐标。
  • 如果您必须担心性能,请使用整数坐标。

由于您的问题也被标记为:看看RenderingHints. 笔画控制设置将控制坐标是否在某些情况下进行四舍五入,而抗锯齿和插值设置将影响小数位置的渲染方式,第一个用于矢量轮廓,第二个用于光栅图像。

于 2013-03-25T13:13:05.620 回答
0

不,我不认为画布可以提供双倍积分。一个解决方法是将双精度转换为 int。这样,该数字被视为一个 int 并且它像往常一样工作。铸造看起来像这样:
db.drawImage(image, (int) x, (int) y;
我在我的游戏中使用它并且效果很好。

于 2013-08-17T11:12:53.837 回答