# Circle Smear - RealWorld forums

## Circle Smear

PAEz
on November 8th 2013

Be warned the Size parameter affects the time it will take alot.

Code
Configuration

Configuration.AddSlider("size", "Size", "Be warned, the larger the size the longer it will take, keeping it under 10 is sane.", 1, 100, 4);
Configuration.AddSlider("density", "Density Percentage", "", 1, 100, 50);
Configuration.AddSlider("mix", "Mix Percentage", "Who much of the smear to mix with orginal image, 1 will replace the image.", 1, 100, 50);

Execution

// Plus PAEz touch here and there

this.mixColors = function(t, rgb1, rgb2){
var r = this.linearInterpolate(t,rgb1 >> 16 & 255,rgb2 >> 16 & 255);
var g = this.linearInterpolate(t,rgb1 >> 8 & 255,rgb2 >> 8 & 255);
var b = this.linearInterpolate(t,rgb1 & 255,rgb2 & 255);
var a = this.linearInterpolate(t,rgb1 >> 24 & 255,rgb2 >> 24 & 255);
return b | (g << 8) | (r << 16) | (a << 24);
}

this.linearInterpolate = function(t,a,b){
return a + t * (b-a);
}

filter = function(size, density, mix) {
var output = Document.RasterImage;
var width = output.sizeX;
var height = output.sizeY;

var input = Document.Duplicate();
input = input.RasterImage;
//parseInt(size); // the size got turned to an int....wonder why?...it seemed to work when it didnt
var numShapes = parseInt(2*density/30*width*height / 2);
for(var i = 0; i < numShapes; i++){
var sx = (Math.random()*Math.pow(2,32) & 0x7fffffff) % width;
var sy = (Math.random()*Math.pow(2,32) & 0x7fffffff) % height;
var rgb2 = input.GetPixel(sx,sy,0,0);
for(var x = sx - radius; x < sx + radius + 1; x++){
for(var y = sy - radius; y < sy + radius + 1; y++){
var f = (x - sx) * (x - sx) + (y - sy) * (y - sy);
if (x >= 0 && x < width && y >= 0 && y < height && f <= radius2) {
var rgb1 = input.GetPixel(x,y,0,0);
var mixedRGB = mixColors(mix,rgb1,rgb2)
output.SetPixel(x,y,0,0,mixedRGB);
}
}
}
}
}

var size = Configuration.size;
var density = Configuration.density/100;
var mix = Configuration.mix/100;
filter(size, density, mix);

Note to self...
Replace the Math.random function with something that is seedable so that the preview will match the result and so the settings are portable.

Page views: 2181       Posts: 1
Software support
Select background