javascript - Canvas /精确线描

标签 javascript

我目前正在使用 javascript 和 canvas。

我想绘制一个没有模糊线条的 1 像素边框。 我读过有关 0.5 px 翻译的内容。

var shift = 0.5;
if (x1 === x2) {
  var shiftX = shift;
  var shiftY = 0;
} else {
  var shiftX = 0;
  var shiftY = shift;
}

出了什么问题? JSFiddle

为什么右下角少了一个像素?

最佳答案

这有效!!

ctx.line = function (x1, y1, x2, y2) {
    var shift = 0.5;

    if (x1 === x2) {
        var shiftX = x1 < 2 ? shift : -shift;
        var shiftY = 0;
    } else if (y1 === y2) {
        var shiftX = 0;
        var shiftY = y1 < 2 ? shift : -shift;
    } else {
        var shiftX = 0;
        var shiftY = 0;
    }

    ctx.translate(shiftX, shiftY);
    ctx.beginPath();
    ctx.moveTo(x1, y1);
    ctx.lineTo(x2, y2);
    ctx.stroke();
    ctx.translate(-shiftX, -shiftY);
};

您尝试的问题是,太靠近边缘的像素可能会从 Canvas 上移出。此方法确保如果该点位于边缘的 2 个像素之内,则移位发生在远离边缘的方向。

关于javascript - Canvas /精确线描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23551859/

相关文章:

javascript - 如何过滤对象数组中的数组?

javascript - 额外的括号是什么

javascript - 为什么 jQuery 的 .val() 返回 null?

javascript - 异步函数完成后如何开始执行函数?在这种情况下, promise 不起作用

javascript - 在 ajax 请求中间重定向

javascript - jQuery 显示 div(在幻灯片上)主体背景图像淡入淡出效果变化

javascript - 使用 JavaScript 选择两个单选按钮来显示/隐藏 div

javascript - 从ajax错误处理中获取单独的字符串

javascript - 反向链接但不使用历史记录

javascript - 将用户选择的多个单选按钮选项存储在使用 ng-repeat 构建的 Angular js 中