画布黑白图像塑造

时间:2014-04-22 06:11:49

标签: javascript jquery html5 canvas boundary

我目前已将简单图像加载到画布上。

它只是一个黑色背景的白色圆圈。

我要做的是将白色区域转换为形状。 然后,该形状将用于边界检测。

我假设我需要逐像素地循环遍历图像数据?我之前已经完成了颜色操作,但我不确定如何将这些信息保存到“界限”和/或“越界”中。

使用的其他图像会更复杂一些:

enter image description here

谢谢!

2 个答案:

答案 0 :(得分:2)

这里是如何使用context.getImageData来测试鼠标下的像素是黑色还是白色:

关键是获取图像像素阵列并测试红色,绿色或蓝色组件是否接近255(==如果所有rgb等于255则为白色)

示例代码和演示:http://jsfiddle.net/m1erickson/Uw3A4/

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var $canvas=$("#canvas");
var canvasOffset=$canvas.offset();
var offsetX=canvasOffset.left;
var offsetY=canvasOffset.top;

var data;
var $results=$("#results");

var img=new Image();
img.onload=start;
img.crossOrigin="anonymous";
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/temp00.png";

function start(){
    canvas.width=img.width;
    canvas.height=img.height;
    ctx.drawImage(img,0,0);
    data=ctx.getImageData(0,0,canvas.width,canvas.height).data;
}


function handleMouseMove(e){
  e.preventDefault();
  e.stopPropagation();
  mouseX=parseInt(e.clientX-offsetX);
  mouseY=parseInt(e.clientY-offsetY);

  var isWhite=(data[(mouseY*canvas.width+mouseX)*4]>200);
  $results.text(isWhite?"Inside":"Outside");

}

$("#canvas").mousemove(function(e){handleMouseMove(e);});

答案 1 :(得分:0)

用圆圈进行边界检测比这更容易。只需使用距离公式来确定对象是否在圆的半径范围内。

d = sqrt((x2 - x1)^2 + (y2-y1)^2)