<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">import java.awt.*;
import java.awt.image.*;
import java.io.*;

// Emboss Filter
public class embfilt extends EffectFilter
{
	int masksize;
	int[] mask;
	
	// Create object and initialize data
	public embfilt(int size, int[] input)
	{
		masksize = size;
		mask = input;
	}
	
	// Runs algorithm
	public void performEffect()
	{
		int sumr,sumg,sumb;
		int counter;
		int newPixels[] = new int[width*height];	
		int indent = (int) Math.floor(masksize/2);
		
		// Moves through the input array pixel by pixel
		for (int y=indent;y&lt;height-indent;y++)
		{
			for (int x=indent;x&lt;width-indent;x++)
			{
				// Location of centre of mask
				int pointOffset = y*width+x;

				sumr = 0;
				sumg = 0;
				sumb = 0;
				counter = 0;

				// Sums mask values mult by input pixels for entire mask
				for (int m=-indent;m&lt;=indent;m++)
				{
					for (int n=-indent;n&lt;=indent;n++)
					{
						sumr += mask[counter]*((pixels[pointOffset+m*width+n] &gt;&gt; 16)&amp;0xff);
						sumg += mask[counter]*((pixels[pointOffset+m*width+n] &gt;&gt; 8)&amp;0xff);
						sumb += mask[counter]*((pixels[pointOffset+m*width+n])&amp;0xff);
						counter++;
					}
				}
			
				// Normalize values
				sumr &gt;&gt;= 3;
				sumg &gt;&gt;= 3;
				sumb &gt;&gt;= 3;
				
				// Add sums to medium grey
				sumr += 0x7f;
				sumg += 0x7f;
				sumb += 0x7f;
				
				if (sumr &gt; 255) sumr = 255;
				if (sumr &lt; 0) sumr = 0;
				if (sumg &gt; 255) sumg = 255;
				if (sumg &lt; 0) sumg = 0;
				if (sumb &gt; 255) sumb = 255;
				if (sumb &lt; 0) sumb = 0;

				//  Compute final grey value as the max of rgb
				int grey = Math.max(sumg,Math.max(sumr,sumb));
				
				// Store new value in the array
				newPixels[pointOffset] = 0xff000000 + 0x010101 * grey;
			}
		}

		this.pixels = newPixels;
	}
}
</pre></body></html>