HTML5:矩形定位不准确
HTML5: inaccurate positioning of rectangles
我正在使用HTML5的画布来创建"预览"图像,该图像主要由一些矩形和简单的线条组成。到目前为止工作正常,但有一个问题我无法以某种方式解决。假定以下情况:
context.fillStyle = "rgba(0,0,0,0.75)";
context.fillRect(100.64646,100,50.94967,20);
context.fillRect(100.64646+50.94967,100,100,20);
所以我画了 2 个不透明度的矩形。第一个矩形的 x 起始坐标加上 x 长度等于第二个矩形的 x 起始坐标,因此理论上它们应该在没有任何余量的情况下碰撞。可悲的是,结果是不同的:(见 http://files.clemensfreitag.de/thin_spacing.jpg(
盒子之间的间距非常小,背景颜色是可见的。但:如果坐标和长度是整数值,则不会出现此问题。
有没有办法通过使用浮点值来完成它?在我的应用程序中,在绘制之前将它们转换为整数可能是可以接受的,但我只是想知道为什么这不应该与浮点一起使用。
最好克莱门斯
您所看到的是叠加两种不透明颜色的结果。当第一个矩形以 151.59613 结尾时,该矩形将自动抗锯齿,用 rgba(0,0,0,0.4470975( 填充最右侧的列。当第二个矩形从相同的 x 坐标开始时,它也会被抗锯齿,用 rgba(0,0,0,0.3029025( 填充最左边的列(与第一个矩形的最右边相同(。这两个值加起来就是 rgba(0,0,0,0.75(,但这不是它们的混合方式。相反,第二种颜色 (rgba(0,0,0,.3029025(( 绘制在第一种颜色之上,结果为 rgba(0,0,0,0.4470975+(1-0.4470975(*0.3029025( = rgba(0,0,0,0.61457305(。因此,两个矩形之间实际上没有间隙,而是1px列,该列是略浅的灰色阴影。
同样,如果您使用的是纯色,则第二个矩形的抗锯齿列将覆盖第一个矩形的抗锯齿列,从而在"间隙"中产生更浅的灰色阴影。
该问题不会以整数值显示,因为不需要抗锯齿 - 每个矩形都以像素的边缘结束。
看起来没有任何globalCompositeOperation
设置可以解决此问题,并且关闭抗锯齿有时会导致 1px 间隙,因此我认为您最简单的解决方案是强制整数值(或者,您可以清除该列然后用所需的颜色填充它(。
此问题与在基于浮点的网格(尤其是垂直和水平线以及矩形(上绘制对象的方式有关。
有关解释和架构,请参阅此处:http://canop.org/blog/?p=220
根据对象的大小,您需要为形状使用整数或中整数坐标和大小,目标是在两个维度上填充完整的像素。
例如:
- 对细线使用中间整数(一个像素宽(
- 对 2 像素宽的线使用整数坐标
(并扩展矩形的逻辑(
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- 在 JavaScript 中对音频文件进行计时不准确
- 谷歌地图API-缩小时默认标记不准确
- 缺少 iframe ie8.相对定位不能解决问题
- Socket.io 设置间隔不准确
- CreateJS的PreloadJS进度事件不准确
- HTML/Javascript - 定位不一致
- kineticjs - 鼠标悬停不准确
- d3.js 工具提示定位不起作用
- 使用 javascript 库 draw2d 选择连接链接不准确
- 为什么在枚举属性/函数时键长度不准确
- JSON 字符串有效,但 JSON 数据不准确
- 计算何时多次写入文件会导致不准确
- 纹理帧缓冲区数据不准确
- Javascript减去数字是不准确的 - 为什么
- HTML5:矩形定位不准确
- 这 === 是否不适用于浮点舍入不准确的 b/c
- 在 iPad 上绝对定位不会将元素设置在所需位置
- IE10 中的画布鼠标定位不正确
- 碰撞检测在我的游戏中不准确