Javascript 画笔

Javascript 画笔,javascript,html,canvas,smooth,brush,Javascript,Html,Canvas,Smooth,Brush,我试图在HTML5中创建一个平滑的笔刷,下面是一个示例 这就是我试过的,很了不起。但它不像上面的图像那样平滑 Editor.Drawing.Context.globalAlpha = 0.3; var amount = 3; for(var t = -amount; t <= amount; t += 3) { for(var n = -amount; n <= amount; n += 3) { Editor.Drawing.Context.drawIm

我试图在HTML5中创建一个平滑的笔刷,下面是一个示例

这就是我试过的,很了不起。但它不像上面的图像那样平滑

Editor.Drawing.Context.globalAlpha = 0.3;
var amount = 3;

for(var t = -amount; t <= amount; t += 3) {
    for(var n = -amount; n <= amount; n += 3) {
        Editor.Drawing.Context.drawImage(Editor.Drawing.ClipCanvas, -(n-1), -(t-1));
    }
}
Editor.Drawing.Context.globalAlpha=0.3;
风险价值金额=3;
对于(var t=-amount;t使用刷子
选择画笔,这可以是带有预定义画笔的图像,也可以使用屏幕外画布制作一个画笔,并在其中绘制径向渐变。为简单起见,我制作了一个简单的图像画笔,如下所示:

然后,对于绘制到画布的每个新点:

  • 计算上一个点和当前点之间的差值
  • 计算线的长度,这样我们就可以使用与长度无关的绝对步长值
  • 使用标准化值和先前计算的步长值迭代长度
步长值可以是任何看起来很好的值-这在很大程度上取决于笔刷的平滑度及其一般大小(更平滑的笔刷需要更小的步长才能相互融合)

在这个演示中,我使用了笔刷宽度,使用的值越小,沿着线条绘制的笔刷越多,效果越好,但也会减慢程序的速度,所以请找到一个影响质量和速度的值

例如:

每次在绘图时注册新点时都会调用此命令:

function brushLine(ctx, x1, y1, x2, y2) {

    var diffX = Math.abs(x2 - x1),                       // calc diffs
        diffY = Math.abs(y2 - y1),
        dist = Math.sqrt(diffX * diffX + diffY * diffY), // find length
        step = 20 / (dist ? dist : 1),                   // "resolution"
        i = 0,                                           // iterator for length
        t = 0,                                           // t [0, 1]
        b, x, y;

    while (i <= dist) {
      t = Math.max(0, Math.min(1, i / dist));
      x = x1 + (x2 - x1) * t;
      y = y1 + (y2 - y1) * t;
      b = (Math.random() * 3) | 0;
      ctx.drawImage(brush, x - bw * 0.5, y - bh * 0.5);  // draw brush
      i += step;
    }
}
使用刷子 选择画笔,这可以是带有预定义画笔的图像,也可以使用屏幕外画布制作一个画笔,并在其中绘制径向渐变。为简单起见,我制作了一个简单的图像画笔,如下所示:

然后,对于绘制到画布的每个新点:

  • 计算上一个点和当前点之间的差值
  • 计算线的长度,这样我们就可以使用与长度无关的绝对步长值
  • 使用标准化值和先前计算的步长值迭代长度
步长值可以是任何看起来很好的值-这在很大程度上取决于笔刷的平滑度及其一般大小(更平滑的笔刷需要更小的步长才能相互融合)

在这个演示中,我使用了笔刷宽度,使用的值越小,沿着线条绘制的笔刷越多,效果越好,但也会减慢程序的速度,所以请找到一个影响质量和速度的值

例如:

每次在绘图时注册新点时都会调用此命令:

function brushLine(ctx, x1, y1, x2, y2) {

    var diffX = Math.abs(x2 - x1),                       // calc diffs
        diffY = Math.abs(y2 - y1),
        dist = Math.sqrt(diffX * diffX + diffY * diffY), // find length
        step = 20 / (dist ? dist : 1),                   // "resolution"
        i = 0,                                           // iterator for length
        t = 0,                                           // t [0, 1]
        b, x, y;

    while (i <= dist) {
      t = Math.max(0, Math.min(1, i / dist));
      x = x1 + (x2 - x1) * t;
      y = y1 + (y2 - y1) * t;
      b = (Math.random() * 3) | 0;
      ctx.drawImage(brush, x - bw * 0.5, y - bh * 0.5);  // draw brush
      i += step;
    }
}

回答得好!谢谢。回答得好!谢谢。