参考:
var _getContourData = function(contourData,canvas){
var w = canvas.width;
var h = canvas.height;
_draft = canvas.getContext('2d').createImageData(w, h);
var pixelsData = contourData;
var pixels = pixelsData.data;
//遍历像素并标记
for (var r = 0; r < h - 1; r++) {
for (var c = 0; c < w - 1; c++) {
var rIndexCurrent = 4 * (c + r * w);
var gIndexCurrent = 4 * (c + r * w) + 1;
var bIndexCurrent = 4 * (c + r * w) + 2;
var aIndexCurrent = 4 * (c + r * w) + 3;
var rIndexRight = 4 * (c + 1 + r * w);
var gIndexRight = 4 * (c + 1 + r * w) + 1;
var bIndexRight = 4 * (c + 1 + r * w) + 2;
var aIndexRight = 4 * (c + 1 + r * w) + 3;
var rIndexDown = 4 * (c + (r + 1) * w);
var gIndexDown = 4 * (c + (r + 1) * w) + 1;
var bIndexDown = 4 * (c + (r + 1) * w) + 2;
var aIndexDown = 4 * (c + (r + 1) * w) + 3;
var currentPixel = new pixel(pixels[rIndexCurrent], pixels[gIndexCurrent], pixels[bIndexCurrent], pixels[aIndexCurrent]);
var rightPixel = new pixel(pixels[rIndexRight], pixels[gIndexRight], pixels[bIndexRight], pixels[aIndexRight]);
var downPixel = new pixel(pixels[rIndexDown], pixels[gIndexDown], pixels[bIndexDown], pixels[aIndexDown]);
var horizonDis = distance(currentPixel, rightPixel);
var verticalDis = distance(currentPixel, downPixel);
if (horizonDis >= 200 || verticalDis >= 200) {
_draft.data[rIndexCurrent] = 255;
_draft.data[gIndexCurrent] = 0;
_draft.data[bIndexCurrent] = 0;
_draft.data[aIndexCurrent] = 255;
} else {
_draft.data[rIndexCurrent] = 0;
_draft.data[gIndexCurrent] = 0;
_draft.data[bIndexCurrent] = 0;
_draft.data[aIndexCurrent] = 0;
}
}
}
//计算距离
function distance(pa, pb) {
var sum = 0;
sum += Math.abs(Number(pa.r) - Number(pb.r));
sum += Math.abs(Number(pa.g) - Number(pb.g));
sum += Math.abs(Number(pa.b) - Number(pb.b));
var sum = Math.abs(Number(pa.a)-Number(pb.a));
return sum;
}
//自定义像素对象
function pixel(red, green, blue, aval) {
this.r = red;
this.g = green;
this.b = blue;
this.a = aval;
}
}