将图像像素数据转换为坐标数组
Convert Image Pixel Data to Coordinate Array
我有以下代码将图像绘制到画布并获取像素数据:
var canvas=$('#canvas'),
ctx=canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
var data=ctx.getImageData(0, 0, canvas.width, canvas.height);
这会将我需要存储RGBA
值提取到一个数组中,我将能够使用 X/Y 坐标访问该数组。绘制到画布的图像是黑/白图像 - 因此它会检查像素在X
时是黑色还是白色,Y
- 如下所示:
imageArray[x][y]
我不知道如何循环像素数据并将其保存到2d
数组中,以便我能够通过坐标调用它。
您可以做的是遍历整个图像数据数组并提取所需的值:
每个像素在数组中占用四个空间作为其 rgba 值,因此我们可以遍历像素总数并每次从数组中获取四个值。
您可以通过将当前索引除以高度来获取 y 值(或像素所在的行),通过使用 y 值从当前索引中减去行,留下 x,获得 x(或列像素所在的行)。
var pixels = imageData.data;
var w = imageData.width;
var h = imageData.height;
var l = w * h;
for (var i = 0; i < l; i++) {
// get color of pixel
var r = pixels[i*4]; // Red
var g = pixels[i*4+1]; // Green
var b = pixels[i*4+2]; // Blue
var a = pixels[i*4+3]; // Alpha
// get the position of pixel
var y = parseInt(i / w, 10);
var x = i - y * w;
}
ctx.getImageData
返回一个包含 .data
属性的对象。
该数据属性是一个数组,已包含您要查找的所有像素颜色。
// get the imageData object
var imageData=ctx.getImageData(0, 0, canvas.width, canvas.height);
// get the pixel color data array
var data=imageData.data;
data
数组是一个长数组,包含画布上每个像素的红色、绿色、蓝色和 alpha(不透明度)值。 data
数组的形状如下:
// top left pixel [0,0]
data[0]: Red value for pixel [0,0],
data[1]: Green value for pixel [0,0],
data[2]: Blue value for pixel [0,0],
data[3]: Alpha value for pixel [0,0],
// next pixel rightward [1,0]
data[4]: Red value for pixel [1,0],
data[5]: Green value for pixel [1,0],
data[6]: Blue value for pixel [1,0],
data[7]: Alpha value for pixel [1,0],
// and so on for each pixel on the canvas
...
您可以像这样获取data
内任何 [x,y] 像素的位置:
// the data[] array position for pixel [x,y]
var n = y * canvas.width + x;
然后你可以获取该像素的红色、绿色、蓝色和 alpha 值,如下所示:
var red=data[n];
var green=data[n+1];
var blue=data[n+2];
var alpha=data[n+3];
相关文章:
- 如何创建一个谷歌地图地理坐标数组
- 断言错误:断言失败:坐标数组的长度应与步幅匹配
- Javascript 地理位置:将坐标存储在数组中
- 将地理位置坐标放入数组中
- 检查鼠标光标是否在带坐标的数组范围内
- 如何在谷歌地图API中使用坐标数组绘制多边形
- 每个表的2D数组获取坐标JTSL,JAVASCRIPT
- 根据折线坐标数组创建高程剖面图
- 使用地理编码返回陆基坐标数组时出现问题
- Javascript - 字符串到坐标数组
- 将图像像素数据转换为坐标数组
- 从xml创建多边形坐标数组
- 如何循环遍历坐标数组
- 在javascript中搜索精确匹配的多维坐标数组
- 如何获得坐标数组的最大/最小边界
- 使用Javascript有效地从坐标数组中获得距离最短的一对坐标
- 在Google Maps API V3中使用LatLng坐标数组绘制折线
- 如何循环遍历坐标数组来为layerGroup创建地图标记
- 在坐标数组上循环并计算距离javascript
- 在JavaScript中创建坐标数组