Difference between revisions of "User:Lerc/Blur"

From CodeStuff
Jump to: navigation, search
 
Line 1: Line 1:
 
<edcode>
 
<edcode>
 +
 +
 +
  
 
var imageSize = 256;
 
var imageSize = 256;
Line 18: Line 21:
 
       bytes[i++]=(ty)&0xff;
 
       bytes[i++]=(ty)&0xff;
 
       bytes[i++]=((ty+tx)*-0.457)&0xff;
 
       bytes[i++]=((ty+tx)*-0.457)&0xff;
       bytes[i++]=((Math.sqrt((128-tx)*(128-tx)+(128-ty)*(128-ty))*r) &0x3ff);
+
       bytes[i++]=0;//((Math.sqrt((128-tx)*(128-tx)+(128-ty)*(128-ty))*r) &0x3ff);
 
     }
 
     }
 
   }
 
   }
 
}
 
}
  
 +
 +
var testBlob=[];
 +
testBlob.push( {x:70, y:120, r:1.0, g:0.6, b:0.2, w:1} );
 +
testBlob.push( {x:200, y:20, r:0.0, g:0.6, b:0.0, w:6} );
 +
testBlob.push( {x:100, y:100, r:1.0, g:0.6, b:0.2, w:1} );
 +
 +
function randr(range) {
 +
  return Math.random()*range-(range/2);
 +
}
 +
 +
for (var i=0; i<15;i++) {
 +
  testBlob.push( {x:randInt(255),  y:randInt(255), r:Math.random(), g:Math.random(), b:Math.random(), w:Math.random()*4 }) ;
 +
}
 +
 +
function evaluateBlobs(bytes,blobs) { 
 +
  var i=0;
 +
  for (var ty=0;ty<bufferHeight;ty++) {
 +
    for (var tx=0;tx<bufferWidth;tx++) {
 +
      var r=0,g=0,b=0;
 +
      var sum=0;
 +
      for (var j=0; j<blobs.length; j++) {
 +
        var blob=blobs[j];
 +
        var dx = tx-blob.x;
 +
        var dy = ty-blob.y;
 +
       
 +
        var base=1/Math.sqrt(dx*dx + dy*dy);
 +
        var force=Math.pow(base,blob.w);
 +
       
 +
        r+=force*blob.r;
 +
        g+=force*blob.g;
 +
        b+=force*blob.b;
 +
        sum+=force;       
 +
      } 
 +
      r/=sum;
 +
      g/=sum;
 +
      b/=sum;
 +
     
 +
      if (r>1) r=1;
 +
      if (g>1) g=1;
 +
      if (b>1) b=1;
 +
      if (r<0) r=0;
 +
      if (g<0) g=0;
 +
      if (b<0) b=0;
 +
     
 +
      bytes[i++]=r * 255;
 +
      bytes[i++]=g * 255;
 +
      bytes[i++]=b * 255;
 +
      bytes[i++]=255;
 +
 +
    }
 +
  } 
 +
}
 +
   
 +
function plot(target,x,y,r,g,b) {
 +
    var i =(y*bufferWidth+x)*4; 
 +
    target[i++]=r;
 +
    target[i++]=g;
 +
    target[i++]=b;
 +
    target[i++]=255;
 +
}
  
 
function mix(source,dest) {
 
function mix(source,dest) {
Line 38: Line 101:
 
       var down = readPixel(tx,ty+1);  
 
       var down = readPixel(tx,ty+1);  
 
       var left = readPixel(tx-1,ty);  
 
       var left = readPixel(tx-1,ty);  
       var right = readPixel(tx-1,ty);  
+
       var right = readPixel(tx+1,ty);  
 
       var here = readPixel(tx,ty);  
 
       var here = readPixel(tx,ty);  
 
       var alphasum = up.a+down.a+left.a+right.a+here.a;
 
       var alphasum = up.a+down.a+left.a+right.a+here.a;
Line 47: Line 110:
 
       var i =(ty*bufferWidth+tx)*4;   
 
       var i =(ty*bufferWidth+tx)*4;   
  
       dest[i++]=red;
+
       dest[i++]=red+0.5;
       dest[i++]=green;
+
       dest[i++]=green+0.5;
       dest[i++]=blue;
+
       dest[i++]=blue+0.5;
 
       dest[i++]=(alphasum==0)?0:255;;
 
       dest[i++]=(alphasum==0)?0:255;;
 
     }
 
     }
 
   }
 
   }
  
 +
}
 +
 +
function drawSeeds(target,seeds) {
 +
  for (var i=0; i<seeds.length ;i++) {
 +
      var seed = seeds[i];
 +
      plot(target,seed.x,seed.y,seed.r,seed.g,seed.b);
 +
  }
 +
}
 +
 +
function randInt(max) {
 +
  return Math.floor((Math.random()*(max+1)));
 
}
 
}
  
Line 59: Line 133:
 
drawImageData(0,0,bufferWidth,bufferHeight,a);
 
drawImageData(0,0,bufferWidth,bufferHeight,a);
 
print("wibble");
 
print("wibble");
 +
 
 +
evaluateBlobs(a,testBlob);
 +
drawImageData(0,0,bufferWidth,bufferHeight,a);
 +
print("gleep");
 +
 
 +
 
 +
/* 
 +
var seeds = [];
  
for (var i=0; i<30; i++) {
+
seeds.push( {x:200, y:200, r:100, g:200, b:130} )
   mix(a,b);
+
for (var i=0; i<150;i++) {
  mix(b,a);
+
   seeds.push( {x:randInt(255), y:randInt(255), r:randInt(255), g:randInt(255), b:randInt(255)} ) ;
 
}
 
}
drawImageData(0,0,bufferWidth,bufferHeight,b);
+
 
 +
for (var j=0; j<5000; j++) {
 +
  for (var i=0; i<3; i++) {
 +
   
 +
    drawSeeds(a,seeds);   
 +
    ///plot(a,200,200,100,200,130);   
 +
    mix(a,b);
 +
   
 +
    drawSeeds(b,seeds);   
 +
    mix(b,a);
 +
  }
 +
  drawImageData(0,0,bufferWidth,bufferHeight,b);
 +
}
 +
*/
 +
 
  
  

Latest revision as of 20:30, 12 February 2012