【发布时间】:2014-12-06 14:16:30
【问题描述】:
我正在尝试为画布上的黑白图像的黑色像素着色。
我正在使用的天真的代码是:
function color_text(canvas, r, g, b, w, h) {
var ctx = canvas.getContext('2d');
var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
var pixels = imageData.data;
for (var x = 0; x < w; x++) {
for (var y = 0; y < h; y++) {
var redIndex = ((y - 1) * (canvas.width * 4)) + ((x - 1) * 4);
var greenIndex = redIndex + 1;
var blueIndex = redIndex + 2;
var alphaIndex = redIndex + 3;
if ((pixels[redIndex] < 240) && (pixels[greenIndex] < 240) && (pixels[blueIndex] < 240)) {
pixels[redIndex] = r;
pixels[greenIndex] = g;
pixels[blueIndex] = b;
}
}
}
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.putImageData(imageData, 0, 0);
}
我使用
然而,canvas 的原生 drawImage() 仍有很多不足之处,因此我使用this answer 中提供的代码的略微修改版本缩小了图像。这段代码生成的黑白图像很漂亮,比canvas的原生方法好很多。但是,当我使用上述函数为图像着色时,它又看起来很糟糕。
完整的 jsfiddle 在这里:http://jsfiddle.net/q9sd9w1k/
关于如何有效地为高质量版本着色有什么想法吗?
谢谢。
【问题讨论】:
-
你可以看看这个话题:Colorization Using Optimization
标签: javascript css html canvas