1

我调整了一个处理草图,以产生一个我需要的网络应用程序的电视静态效果的变体。现在我想把这个效果转换成 JS/canvas。下面的处理代码中给出的纯 javascript/canvas 等价物是loadPixels()什么?copyArray()updatedPixels()draw()

int[] ppx;
Random generator = new Random();

void setup() {
  size(640,480);
  loadPixels();  
  ppx = new int[pixels.length];
  for (int y = 0; y < ppx.length;y++) {
      int spread = generator.nextInt(5);
      switch(spread) {
        case(1):
            if(y-480 > 0) {
                ppx[y] = ppx[y-480];
            }
            break;
        case(2):
            if(y-1 > 0) {
                ppx[y] = ppx[y-1];
            }
            break;
        case(3):
            ppx[y] = color(0,generator.nextInt(2)*255,0);
            if(y+480 < ppx.length) {
                ppx[y+480] = ppx[y];
            }
            break;
        case(4):
            ppx[y] = color(0,generator.nextInt(2)*255,0);
            if(y+1 < ppx.length) {
                ppx[y+1] = ppx[y];
            }
            break;
        case(0):
            break;
      };
  }
  frameRate(100000000000L);

}
void draw() {
  for (int y = 0; y < height;)
     arrayCopy(ppx, generator.nextInt(height/2), pixels, y++*width,width);
  updatePixels();
}
4

2 回答 2

1

您可以使用 John Resig 的 Processing.js 进行一次性转换: http: //processingjs.org/

Canvas 和 JS 的工作水平要低一些,可能从这里开始:http: //net.tutsplus.com/tutorials/javascript-ajax/canvas-from-scratch-pixel-manipulation/

于 2013-03-19T13:51:48.870 回答
0

到目前为止,我已经使用指向 HTMLCanvasElement 的 s 实现了这些函数。是否可以在展开循环的情况下改进 arrayCopy 尚无定论:

    var x = s.getContext('2d');
    var pixels;
    function arrayCopy(src,sstart,dst,dstart,length) {
            length += sstart;
            dstart += length;
            while(--length > sstart) {
                    dst[--dstart] = src[length];    
            }       
    }
    function loadPixels() {
            pixels = x.getImageData(0,0,s.width,s.height);
    }
    function updatePixels() {
            x.putImageData(0,0,pixels);
    }

我仍然不确定如何使 JS 等效于一个draw()函数。

于 2013-03-19T14:05:06.100 回答