您可以使用drawImage 将图像绘制到画布上,如MDN example. 所示,然后使用getImageData 提取像素数据,它返回一个包含width、height 和data 的对象属性。
data 属性是一系列 rgba(红色、绿色、蓝色、alpha)值,每行像素从左到右运行。数值范围为 0-255。对于透明度,0 表示像素透明,255 表示不透明。
数组如下所示:
,--- first pixel (top left)
| ,-- second pixel
____|___ ___|___ _______,--- last pixel (bottom right)
[r,g,b,a,r,g,b,a...,r,g,b,a]
鉴于画布上下文的宽度和高度,您可以使用一些不那么复杂的数学来获取 (x,y) 处的像素,或者只是运行一些嵌套循环,您可以在任何给定的 (x ,y)。
至于寻找最近的黑色像素,我建议您从 (x,y) 处的像素开始,然后递增/递减 x,y 或两者兼而有之,以获得周围的像素。我能想到的最快的方法是在一个方向上穿过像素,直到你碰到你想要的像素。对其他方向执行此操作。然后比较值。
在笛卡尔平面中让相邻像素距离“红色像素”1 像素的示例。如果你只想要水平和垂直,你可以省略对角线。
/*(x-1,y+1)*/ ( x ,y+1) /*(x+1,y+1)*/
(x-1, y ) ( x , y ) (x+1, y )
/*(x-1,y-1)*/ ( x ,y-1) /*(x+1,y-1)*/
对于距离,给定“红色像素”的 (x,y) 和最近的黑色像素 (x,y),您可以使用one of many distance formulas。