如何从Worker获取一系列对象?

时间:2014-10-22 13:42:05

标签: javascript arrays web-worker

我有一个简单的Pixel伪类,它有.H().S().L()方法。我在图像分析中使用它们 - 就像这个水印检测一样:

saturation diferential

要从ImageData中获取对象,我只需遍历ImageData并创建多维数组:

  //Get image data
  var id = ctx.getImageData(0, 0, canvas1.width, canvas1.height);
  //The Uint8 array
  var pixels = id.data;
  //Dimensions
  var length = pixels.length;
  var width = id.width;
  var height = id.height;
  //Create empty array for 2D data
  var pixels2D = [];
  //Loop vertically
  for (var y = 0; y < height; y++) {
    //Create 2nd level array
    pixels2D.push([]);            
    //Cache the vertical offset
    var ofy = y * width;
    //Loop horizontally
    for (var x = 0; x < width; x++) {
      //Calculate X offset
      var off = (ofy + x) * 4;
      //Create new object
      pixels2D[y].push(new Pixel([pixels[off], pixels[off + 1], pixels[off + 2], pixels[off + 3]]));
    }
  }

对于大图片,这需要一段时间。接着,我发现了Workers。这似乎是执行异步CPU要求任务的最佳方式,因此我的浏览器不会冻结。

可以pass UInt8Array to worker - 但是如何检索伪类实例数组呢? javascript中的 Pseudo-Class实例无法序列化......

0 个答案:

没有答案