我调整了一个Processing sketch来生成一个我需要的Web应用程序的静态效果变体。现在我想将此效果转换为JS / canvas。在以下处理代码中给出的loadPixels()
,copyArray()
,updatedPixels()
和draw()
的纯javascript /画布等价物是什么,或者如何最好地进行转换可能,JS / canvas不像处理/ Java那样高效吗?
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();
}
答案 0 :(得分:1)
您可以使用John Resig的Processing.js进行一次性转换: http://processingjs.org/
Canvas和JS的工作有点低级可能从这里开始: http://net.tutsplus.com/tutorials/javascript-ajax/canvas-from-scratch-pixel-manipulation/
答案 1 :(得分:0)
到目前为止,我已经实现了这些函数,并指向了一个HTMLCanvasElement。如果arrayCopy can be improved没有loop unrolling:
,陪审团仍然不清楚 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()
函数。