javascript - 有没有办法修改 Canvas 中的像素而不必复制整个缓冲区?

标签 javascript dom canvas buffer

有没有办法修改 Canvas 中的特定像素,而不必使用 ctx.getImageData 获取整个缓冲区,然后使用 ctx.putImageData 将其复制回来?这很重要,因此我不需要在每次帧更新时都进行如此昂贵的复制操作。

最佳答案

是的,只需指定要修改的区域即可:

var imageData = ctx.getImageData(x, y, width, height);

完成后,将其放回原来的位置:

ctx.putImageData(imageData, x, y);

这将抓取 x/y 处的单个像素:

var imageData = ctx.getImageData(x, y, 1, 1);

/// turn the pixel into luma
var gray = data[0] * 0.2126 + data[1] * 0.7152 +data[2] * 0.0722;
imageData.data[0] = gray;  /// r
imageData.data[1] = gray;  /// g
imageData.data[2] = gray;  /// b
imageData.data[3] = 255;   /// alpha

/// put back
ctx.putImageData(imageData, x, y);

当然,如果修改意味着像素的简单颜色变化,显然只需使用 fillRect()rect() + fill() 对于许多矩形,但如果您需要做更复杂的事情(我假设这里就是这种情况),可以通过这种方式提取区域。

关于javascript - 有没有办法修改 Canvas 中的像素而不必复制整个缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21009015/

相关文章:

javascript - 离线版 repl.it

javascript - 为什么js文件中的变量值被删除。当我打开 jquery fancy box 时?

jquery - 使用 jQuery 获取 DOM 中选定节点的最大深度

javascript - 在 Fabric.js 中,如何修改对象类以便所有子类都具有新的自定义属性?

javascript - 解析多级 JSON 时遇到问题

c# - 单击同级元素时会触发 Click 事件

javascript - Firefox 中具有可调整大小列的 JQuery UI 表性能问题

javascript - 如何将所有匹配元素视为一个集合?

node.js - 使用node上传图片到Heroku并获取其url

canvas - 在easeljs中使用路径串绘制路径