javascript画布未写入修改的数据

javascript画布未写入修改的数据,javascript,canvas,Javascript,Canvas,我正在尝试去饱和图像。我目前正在加载它,解析图像数据,但我无法让它写回画布 我已经按照所有的指示去做了 context.putImageData(imagedata,0,0); 我这样做了,但是图像数据没有改变。“ctx”是先前加载的图像的上下文,该图像将变为灰度 greyscale: function grayscale(ctx){ var id = ctx.getImageData(0,0, ctx.canvas.width, ctx.canvas.height)

我正在尝试去饱和图像。我目前正在加载它,解析图像数据,但我无法让它写回画布

我已经按照所有的指示去做了

context.putImageData(imagedata,0,0);
我这样做了,但是图像数据没有改变。“ctx”是先前加载的图像的上下文,该图像将变为灰度

    greyscale: function grayscale(ctx){

        var id = ctx.getImageData(0,0, ctx.canvas.width, ctx.canvas.height);

        for(var i=0; i<id.height; i++){
            for(var e=0; i<id.width; i++){

                var index = (e*4)*id.width+(i*4);

                var avg = (id.data[index] + id.data[index+1] + id.data[index+2]) / 3

                id.data[index] = avg;     
                id.data[index+1] = avg;
                id.data[index+2] = avg;
            }
        }

        ctx.putImageData(id,0,0);

    }
greyscale:函数灰度(ctx){
var id=ctx.getImageData(0,0,ctx.canvas.width,ctx.canvas.height);

对于(var i=0;i可能不是你想要的答案,但是你看过flot.js吗?很好的图表功能,源代码可以阅读。

你的内部循环是比较i并增加i,而不是增加e

当你计算指数时,你也有e和i的切换。它应该是(去掉4个因素):

问题在于:

for(var e=0; i<id.width; i++){
for(var e=0;i
for(var e=0; i<id.width; i++){