Difference between revisions of "User:Lerc/Blur"

From CodeStuff
Jump to: navigation, search
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
<edcode>
 
<edcode>
 +
 +
 +
 +
 
var imageSize = 256;
 
var imageSize = 256;
  
Line 17: 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 readPixel(x,y) {
 +
    if ( (x<0) || (y<0) || (x>=bufferWidth) || (y>=bufferHeight) )  return {r:0,g:0,b:0,a:0.0}
 +
                                                                         
 +
    var i =(y*bufferWidth+x)*4; 
 +
    var result = {r:source[i++],g:source[i++],b:source[i++],a:source[i++]/255.0};
 +
    return result;
 +
  }
 +
 +
  for (var ty=0;ty<bufferHeight;ty++) {
 +
    for (var tx=0;tx<bufferWidth;tx++) {
 +
      var up = readPixel(tx,ty-1);
 +
      var down = readPixel(tx,ty+1);
 +
      var left = readPixel(tx-1,ty);
 +
      var right = readPixel(tx+1,ty);
 +
      var here = readPixel(tx,ty);
 +
      var alphasum = up.a+down.a+left.a+right.a+here.a;
 +
     
 +
      var red =  (up.r*up.a + down.r*down.a +left.r*left.a + right.r*right.a + here.r*here.a)/alphasum;
 +
      var green = (up.g*up.a + down.g*down.a +left.g*left.a + right.g*right.a + here.g*here.a)/alphasum;
 +
      var blue =  (up.b*up.a + down.b*down.a +left.b*left.a + right.b*right.a + here.b*here.a)/alphasum;   
 +
      var i =(ty*bufferWidth+tx)*4; 
 +
 +
      dest[i++]=red+0.5;
 +
      dest[i++]=green+0.5;
 +
      dest[i++]=blue+0.5;
 +
      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 25: 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 = [];
 +
 +
seeds.push( {x:200, y:200, r:100, g:200, b:130} )
 +
for (var i=0; i<150;i++) {
 +
  seeds.push( {x:randInt(255),  y:randInt(255), r:randInt(255), g:randInt(255), b:randInt(255)} ) ;
 +
}
 +
 +
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);
 +
}
 +
*/
 +
 +
 +
 +
 +
  
 
</edcode>
 
</edcode>

Latest revision as of 20:30, 12 February 2012