画布和全局复合操作

发布于 2024-11-11 18:35:40 字数 534 浏览 0 评论 0原文

嘿,我有下面的代码,它可以给你“面具”的效果。

JSFiddle: http://jsfiddle.net/neuroflux/m5Fj2/7/

基本上,我会就像半透明的渐变而不是圆形...... 我尝试输入以下代码,但没有成功。

grad = ctx.createRadialGradient(0,0,0,0,0,600); 
  grad.addColorStop(0, '#000');
  grad.addColorStop(1, 'rgb(' + color + ', ' + color + ', ' + color + ')');

  // assign gradients to fill
  ctx.fillStyle = grad;

  // draw 600x600 fill
  ctx.fillRect(0,0,600,600);

但我无法让它工作:'(

帮助(请!)。

Hey, I have the following code, that gives you the effect of a "mask".

JSFiddle: http://jsfiddle.net/neuroflux/m5Fj2/7/

Basically, I would like a semi-opaque gradient instead of a circle...
I tried to put the following code in, but to no advail.

grad = ctx.createRadialGradient(0,0,0,0,0,600); 
  grad.addColorStop(0, '#000');
  grad.addColorStop(1, 'rgb(' + color + ', ' + color + ', ' + color + ')');

  // assign gradients to fill
  ctx.fillStyle = grad;

  // draw 600x600 fill
  ctx.fillRect(0,0,600,600);

But I couldn't get it to work :'(

HELP (please!).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

余厌 2024-11-18 18:35:40

首先,

        tmpCanvas = document.createElement('canvas');
        tmpCanvas.width = c.width;
        tmpCanvas.height = c.height;

        tmpCtx = tmpCanvas.getContext('2d');

这是一种你永远不想在循环中做的事情。现在您每 40 毫秒创建一个新画布!太疯狂了!

其次,如果你想要半透明的渐变,为什么不使用 globalCompositeOperations 而只使用半透明的颜色呢?

将 Alpha 添加到颜色中,如下所示:

 // half transparent
grad.addColorStop(0, 'rgba(0,0,0,.5)');
grad.addColorStop(1, 'rgba(' + color + ', ' + color + ', ' + color + '0.5)');

First off,

        tmpCanvas = document.createElement('canvas');
        tmpCanvas.width = c.width;
        tmpCanvas.height = c.height;

        tmpCtx = tmpCanvas.getContext('2d');

Is the kind of stuff you never want to do in a loop. Right now you are creating a new canvas every 40 milliseconds! That's nuts!

Secondly, if you want a semi-opaque gradient, why don't you not use globalCompositeOperations at all and just use half-transparent colors?

Add alpha to the colors, like this:

 // half transparent
grad.addColorStop(0, 'rgba(0,0,0,.5)');
grad.addColorStop(1, 'rgba(' + color + ', ' + color + ', ' + color + '0.5)');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文