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 21: Line 22:
 
   }
 
   }
 
}
 
}
 +
  
 
function mix(source,dest) {
 
function mix(source,dest) {
   var i=0,j=0;
+
   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 ty=0;ty<bufferHeight;ty++) {
 
     for (var tx=0;tx<bufferWidth;tx++) {
 
     for (var tx=0;tx<bufferWidth;tx++) {
       dest[i++]=source[j++];
+
       var up = readPixel(tx,ty-1);
       dest[i++]=source[j++];
+
      var down = readPixel(tx,ty+1);
       dest[i++]=source[j++];
+
      var left = readPixel(tx-1,ty);
       dest[i++]=255;
+
      var right = readPixel(tx-1,ty);
       j++;
+
      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;
 +
      dest[i++]=green;
 +
       dest[i++]=blue;
 +
       dest[i++]=(alphasum==0)?0:255;;
 
     }
 
     }
 
   }
 
   }
Line 39: Line 59:
 
drawImageData(0,0,bufferWidth,bufferHeight,a);
 
drawImageData(0,0,bufferWidth,bufferHeight,a);
 
print("wibble");
 
print("wibble");
mix(a,b);
+
 
 +
for (var i=0; i<30; i++) {
 +
  mix(a,b);
 +
  mix(b,a);
 +
}
 
drawImageData(0,0,bufferWidth,bufferHeight,b);
 
drawImageData(0,0,bufferWidth,bufferHeight,b);
 +
 +
  
  
  
 
</edcode>
 
</edcode>

Revision as of 21:21, 11 February 2012