HTML5 画布像素操作
HTML5 canvas pixel manipulation
我只是想养成像素操作的习惯,它不会改变任何东西。
我使用以下循环来反转每个像素:
var newImage = context.createImageData(canvas.width, canvas.height);
var arr = context.getImageData(0, 0, canvas.width, canvas.height);
var pixels = arr.data;
for(var i = 0; i < pixels.length; i+=4){
var r = 255 - pixels[i];
var g = 255 - pixels[i + 1];
var b = 255 - pixels[i + 2];
var a = pixels[i + 3];
newImage.data[i] = r;
newImage.data[i + 1] = g;
newImage.data[i + 2] = b;
newImage.data[i + 3] = a;
}
然而,当我尝试清除画布并重写它时,没有任何反应:
context.clearRect(0, 0, canvas.width, canvas.height);
context.putImageData(newImage, 0, 0);
为什么这不起作用?我做错了什么?
斯菲德尔
问题来自图像(尚未加载)。你的代码有效(观看这个没有图像的小提琴 - http://jsfiddle.net/B82nk/1/)。
您必须执行以下操作:
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
canvas.width = 500;
canvas.height = 322;
var image_obj = new Image();
image_obj.onload = function(){
var newImage = context.createImageData(canvas.width, canvas.height);
var arr = context.getImageData(0, 0, canvas.width, canvas.height);
var pixels = arr.data;
for(var i = 0; i < pixels.length; i+=4){
var r = 255 - pixels[i];
var g = 255 - pixels[i + 1];
var b = 255 - pixels[i + 2];
var a = pixels[i + 3];
newImage.data[i] = r;
newImage.data[i + 1] = g;
newImage.data[i + 2] = b;
newImage.data[i + 3] = a;
}
context.clearRect(0, 0, canvas.width, canvas.height);
context.putImageData(newImage, 0, 0);
}
image_obj.src = 'http://www.johnchapple.com/jcwp/wp-content/uploads/2012/09/photography_quotes.jpg';
相关文章:
- 如何通过溢出来判断元素被切断了多少像素:隐藏在父级上
- 点击facebook像素跟踪注册(JS/JQUERY代码)
- 点击(右键点击)使用传单地图库获取图像覆盖的像素坐标
- 如何使线条的边缘像素保持半透明
- 画布:逐像素绘制图像并请求动画帧计时
- 如何's css标记"-webkit最小设备像素比”;在Javascript中实现
- javascript mootools平滑滚动'x'像素数量
- 逐像素碰撞检测弹球
- 获取图像的平均外部像素颜色
- 如何根据分辨率添加像素
- 仅当窗口宽度>940像素,无论是通过页面加载还是调整大小
- 使用像素操作修改画布在某种程度上不会;我不能完全在IE9中工作
- HTML5 画布像素操作
- 三.JS像素操作
- Chrome扩展:通过编程设置浏览器操作图标,使图标像素化
- Javascript像素操作:这些是't我的颜色
- 使用html画布和JS操作图像上的像素数据
- HTML5画布像素操作与imageData
- 对窗口滚动的每n个像素执行一些操作
- Javascript像素操作画布,模糊滤镜不工作