import java.awt.*;
import java.awt.image.*;
import java.io.*;

// Uniform Noise Generator
public class un_noise extends noiseFilter
{
	double variance;
	
	// Create object and initialize data
	public un_noise(float var)
	{
		variance = var*500;
	}
		
	// Runs the algorithm
	public void performEffect()
	{	
		int Range;
		int finalnoiseR = 0;
		int finalnoiseG = 0;
		int finalnoiseB = 0;
		int pointOffset = 0;
		int[] newPixels = new int[width*height];
		
		Range = (int)(Math.sqrt(3*variance)*2);
		
		// Moves through the input array pixel by pixel
		for(int i=0;i<height;i++)
		{
			for(int j=0;j<width;j++)
			{
				// Location of current pixel
				pointOffset = i*width+j;
				
				// Creates uniform noise
				finalnoiseR = (int)(((pixels[pointOffset] >> 16)&0xff) + Math.random()*Range - Range/2);
				finalnoiseG = (int)(((pixels[pointOffset] >> 8)&0xff) + Math.random()*Range - Range/2);
				finalnoiseB = (int)(((pixels[pointOffset])&0xff) + Math.random()*Range - Range/2);

				if (finalnoiseR > 255) finalnoiseR = 255;
				if (finalnoiseG > 255) finalnoiseG = 255;
				if (finalnoiseB > 255) finalnoiseB = 255;
				if (finalnoiseR < 0) finalnoiseR = 0;
				if (finalnoiseG < 0) finalnoiseG = 0;
				if (finalnoiseB < 0) finalnoiseB = 0;
					
				newPixels[pointOffset] = (255<<24)|(finalnoiseR<<16)|(finalnoiseG<<8)|(finalnoiseB);
			}
		}
		this.pixels = newPixels;
	}	
}
