【问题标题】:Using globalCompositeOperation for a limited number of images对有限数量的图像使用 globalCompositeOperation
【发布时间】:2017-03-18 13:55:51
【问题描述】:

我有一个非常简单的问题:是否可以仅对有限数量的图像使用 globalCompositeOperation?

例如,我在画布上画了很多东西。最重要的是,完成无关的,我想对两个图像做一些操作(我只想显示结果,而不是两个图像)。怎么可能?

目前,执行此类操作会影响已在下面绘制的所有内容。

因此,我找到的一个解决方案是在另一个画布中执行操作,该画布显示在我的第一个主画布之上。但这看起来很糟糕。首先,它击中了表演。然后,感觉不直观。最后,我失去了对图层的控制:我的第二个画布中的任何内容都将始终位于第一个画布之上。

这看起来是一个非常简单的功能,我希望我只是不擅长谷歌搜索!

非常感谢!

【问题讨论】:

    标签: javascript html canvas clip globalcompositeoperation


    【解决方案1】:

    创建一个屏幕外画布并将其用作工作空间。只要您有 RAM 来存储它们,您就可以创建很多。

    创建一个离屏画布

    function createCanvas(w,h){
          var canvas = document.createElement("canvas");
          canvas.width = w;
          canvas.height = h;
          canvas.ctx = ctx.getContext("2d");
          return canvas;
    }
    

    就这么简单,然后您只需将其视为图像。绘制到另一个画布

    var offScreenCan = createCanvas(1024,1024);
    offScreenCan.ctx.drawImage(myImage);  // put something on the canvas
    ctx.drawImage(offScreenCan,0,0);  // draw that canvas to another
    

    我将上下文附加到画布上,而不是将画布包装在包含对象中。我曾经担心画布会影响性能,现在我一加载所有图像就将它们转换为画布,它根本不会影响性能。

    【讨论】:

    • 我最终也使用了这个解决方案,这似乎对性能影响不大。似乎是正确的,尽管如此简单的事情需要第二张画布是很可悲的。 :( 无论如何谢谢!
    猜你喜欢
    • 2018-03-15
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2016-07-23
    • 2012-03-17
    相关资源
    最近更新 更多