Javascript HTML5画布像素操作
我只是试着养成像素操作的习惯,它不会改变任何事情 我使用以下循环反转每个像素:Javascript HTML5画布像素操作,javascript,html,canvas,web,Javascript,Html,Canvas,Web,我只是试着养成像素操作的习惯,它不会改变任何事情 我使用以下循环反转每个像素: 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){ va
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;
}
为什么这不起作用?我做错了什么
问题来自图像(尚未加载)。 你的代码可以工作(看这个没有图像的小提琴-) 你必须这样做:
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';
var canvas=document.getElementById('canvas');
var context=canvas.getContext('2d');
画布宽度=500;
canvas.height=322;
var image_obj=新图像();
image_obj.onload=函数(){
var newImage=context.createImageData(canvas.width、canvas.height);
var arr=context.getImageData(0,0,canvas.width,canvas.height);
var像素=arr.data;
对于(变量i=0;i
我认为您必须将这些说明放入图像的onLoad
回调中;)此外,除非您是从运行或设置了适当的标志,否则您将被良好的ole“无法从画布获取图像数据,因为画布已被跨源数据污染”消息阻止。您是对的:因为图像尚未加载,所以没有显示任何内容。
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';