javascript - HTML5 Canvas 像素操作

标签 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){
    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;
}

但是,当我尝试清除 Canvas 并重写它时,什么也没有发生:

context.clearRect(0, 0, canvas.width, canvas.height);
context.putImageData(newImage, 0, 0);

为什么这不起作用?我做错了什么?

jsfiddle

最佳答案

问题出在图像(尚未加载)上。 你的代码可以工作(观看这个没有图像的 fiddle - 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';

关于javascript - HTML5 Canvas 像素操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19080529/

相关文章:

javascript - javascript中的圆形动画,greensock tweenlite

javascript - 知道为什么矩形不会出现在我的 Fabricjs Canvas 中吗?

javascript - Bootstrap 和 angularjs : how not propagate the dropdown click on parent

javascript - HTML 未读取 %0A

javascript - 如何将图像附加到 div 然后将其清空然后再次附加回它?

java - 在 JSP 中更新数据库

javascript - 改变 Canvas 元素的颜色

javascript - 检测 Canvas 上的点击

javascript - 如何从外部 php 文件将 javascript 回显到当前 html 页面

javascript - at 符号 (@) 在 React 中用 ES6 和 mixins 做什么?