作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法修改 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/
我是一名优秀的程序员,十分优秀!