import java.awt.*;
import squint.*;
import javax.swing.*;

/*
 *  Threshold - Convert a pure black and white image.  Any pixel with brightness
 *  above a threshold set by user becomes white, and those below the threshold
 *  become black.
 */
public class AdjustLevels extends ImageViewer {
    private final int WINDOW_WIDTH = 720;
    private final int WINDOW_HEIGHT = 600;

    // Controls the threshold used to distinguish bright pixels from dark ones
    private JSlider slider = new JSlider(0, 255, 128);

    // Label placed on slider to indicate its range and current setting
    private JLabel sliderSetting = new JLabel();

    // Add a slider to the image loading controls created by an ImageViewer
    public AdjustLevels() {
        this.createWindow(WINDOW_WIDTH, WINDOW_HEIGHT);

        sliderSetting.setText("Threshold (" + slider.getMinimum() + "-"
                + slider.getMaximum() + "): " + slider.getValue());

        JPanel sliderPanel = new JPanel();
        sliderPanel.add(sliderSetting);
        sliderPanel.add(slider);
        contentPane.add(sliderPanel, BorderLayout.SOUTH);
    }

    /*
     * Update the images pixels and the slider label when slider is moved 
     */
    public void sliderChanged() {
        
        sliderSetting.setText("Level (" + slider.getMinimum() + "-"
                + slider.getMaximum() + "): " + slider.getValue());

        // Get the image to manipulate using ImageViewer method
        SImage picture = getImage();
        
        if (picture != null) {
            int[][] newPixels = updatePixelArray(slider.getValue(), picture);
            updateDisplay(new SImage(newPixels));
        }       
	}

	/*
	 * Uses the desired threshold to turn grayscale images
	 * into black and white.
	 */
	public int[][] updatePixelArray(int threshold, SImage pic) {
		int[][] pixels = pic.getPixelArray();

		
		for (int x = 0; x < pic.getWidth(); x++) {
			for (int y = 0; y < pic.getHeight(); y++) {
				pixels[x][y] = pixels[x][y] * threshold / 255;

			}
		}
		
		return pixels;
	}
}
