javascript - 尝试在没有 get/putImageData 的情况下操作 Canvas 上的 alpha?

标签 javascript canvas html5-canvas getimagedata putimagedata

情况基本上是用基本的线性渐变绘制几个移动的原始形状,以便它们重叠在透明的空白 Canvas 上。当它们重叠时,Alpha channel 值会发生变化(即出血)。

最后阶段是对每个单独像素的 Alpha 进行四舍五入,因此它是 0 或 255,具体取决于它更接近哪个。

使用 imageData 很容易做到 -

var ctxImage = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);
var ctxData = ctxImage.data;
for (var i = 0; i < ctxData.length; i += 4) {
    ctxData[i + 3] = ctxData[i + 3] > 128 ? 255 : 0;
    // or ctxData[i + 3] = Math.round(ctxData[i + 3] / 255) * 255;
}
ctx.putImageData(ctxImage, 0, 0);

由于 getImageData 的 CPU 时间非常昂贵,我希望找到一个使用 globalCompositeOperation 的解决方案,但似乎没有任何方法让它工作,有什么想法吗?

最佳答案

没有其他方法可以将 alpha 值调整为 0 || 255.

合成可以让源像素或目标像素保留下来,但不会像您所描述的那样捕捉 Alpha。

关于javascript - 尝试在没有 get/putImageData 的情况下操作 Canvas 上的 alpha?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28429959/

相关文章:

javascript - 如何为同一个按钮分配多个ID

javascript - 三个 JS SphereGeometry 纹理无法正确渲染

jquery - 使用缓冲区中的 drawImage 更新 Canvas 不要使用 drawImage 应用操作

html - 带图像的 CSS3 Speechbubble

javascript - 如何偏移createjs按钮助手的点击区域?

javascript - 使用 Jssip 的 Webrtc 客户端 - 使用 Free switch 和 chrome 两种方式都没有音频

javascript - 在 Google Chrome 控制台中查看所有 JavaScript 变量的列表

javascript - 多个动态列

具有多个 setTimeout 的 JavaScript 动画

javascript - 如何在画架js中画一个虚线圆圈