// This program has two parts , it can invert a image, and compare with the original one in a frame.You need download and install Java Advanced Imaging before you use it!!!
// compile:
javac "###1&2.java"
//run:
java "###2" "image file name.jpg" <return>
// now, here is the code:
//part one:
import java.awt.GridLayout;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.image.RenderedImage;
import javax.media.jai.PlanarImage;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
/**
* This class represents a Panel which contains two instances of
* DisplayJAIWithPixelInfo.
* The scrolling bars of both images are synchronized so scrolling one image
* will automatically scroll the other.
*/
public class DisplayTwoSynchronizedImages extends JPanel
implements AdjustmentListener
{
/** The DisplayJAIWithPixelInfo for the first image. */
protected DisplayJAIWithPixelInfo dj1;
/** The DisplayJAIWithPixelInfo for the second image. */
protected DisplayJAIWithPixelInfo dj2;
/** The JScrollPane which will contain the first of the images */
protected JScrollPane jsp1;
/** The JScrollPane which will contain the second of the images */
protected JScrollPane jsp2;
/**
* ConstrUCts an instance of this class, setting the components? layout,
* creating two instances of DisplayJAI for the two images and creating/
* registering event handlers for the scroll bars.
* @param im1 the first image (left side)
* @param im2 the second image (right side)
*/
public DisplayTwoSynchronizedImages(PlanarImage im1,PlanarImage im2)
{
super();
setLayout(new GridLayout(1,2));
dj1 = new DisplayJAIWithPixelInfo(im1); // Instances of DisplayJAI for the
dj2 = new DisplayJAIWithPixelInfo(im2); // two images
jsp1 = new JScrollPane(dj1); // JScrollPanes for the both
jsp2 = new JScrollPane(dj2); // instances of DisplayJAI
add(jsp1);
add(jsp2);
// Retrieve the scroll bars of the images and registers adjustment
// listeners to them.
// Horizontal scroll bar of the first image.
jsp1.getHorizontalScrollBar().addAdjustmentListener(this);
// Vertical scroll bar of the first image.
jsp1.getVerticalScrollBar().addAdjustmentListener(this);
// Horizontal scroll bar of the second image.
jsp2.getHorizontalScrollBar().addAdjustmentListener(this);
// Vertical scroll bar of the second image.
jsp2.getVerticalScrollBar().addAdjustmentListener(this);
}
/**
* This method changes the first image to be displayed.
* @param newImage the new first image.
*/
public void setImage1(PlanarImage newimage)
{
dj1.set(newimage);
repaint();
}
/**
* This method changes the second image to be displayed.
* @param newImage the new second image.
*/
public void setImage2(PlanarImage newimage)
{
dj2.set(newimage);
repaint();
}
/**
* This method returns the first image.
* @return the first image.
*/
public RenderedImage getImage1()
{
return dj1.getSource();
}
/**
* This method returns the second image.
* @return the second image.
*/
public RenderedImage getImage2()
{
return dj2.getSource();
}
/**
* This method returns the first DisplayJAI component.
* @return the first DisplayJAI component.
*/
public DisplayJAIWithPixelInfo getDisplayJAIComponent1()
{
return dj1;
}
/**
* This method returns the second DisplayJAI component.
* @return the second DisplayJAI component.
*/
public DisplayJAIWithPixelInfo getDisplayJAIComponent2()
{
return dj2;
}
/**
* This method will be called when any of the scroll bars of the instances of
* DisplayJAI are changed. The method will adjust the scroll bar of the other
* DisplayJAI as needed.
* @param e the AdjustmentEvent that ocurred (meaning that one of the scroll
* bars position has changed.
*/
public void adjustmentValueChanged(AdjustmentEvent e)
{
// If the horizontal bar of the first image was changed...
if (e.getSource() == jsp1.getHorizontalScrollBar())
{
// We change the position of the horizontal bar of the second image.
jsp2.getHorizontalScrollBar().setValue(e.getValue());
}
// If the vertical bar of the first image was changed...
if (e.getSource() == jsp1.getVerticalScrollBar())
{
// We change the position of the vertical bar of the second image.
jsp2.getVerticalScrollBar().setValue(e.getValue());
}
// If the horizontal bar of the second image was changed...
if (e.getSource() == jsp2.getHorizontalScrollBar())
{
// We change the position of the horizontal bar of the first image.
jsp1.getHorizontalScrollBar().setValue(e.getValue());
}
// If the vertical bar of the second image was changed...
if (e.getSource() == jsp2.getVerticalScrollBar())
{
// We change the position of the vertical bar of the first image.
jsp1.getVerticalScrollBar().setValue(e.getValue());
}
}
}
//Ok, now is the main function , part two:
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import javax.swing.JFrame;
/**
* This class demonstrates the use of the invert operator.
*/
public class Invert
{
/**
* The application entry point.
* @param args the command line arguments.
*/
public static void main(String[] args)
{
// We need one argument: the image filename.
if (args.length != 1)
{
System.err.println("Usage: java operators.Invert image");
System.exit(0);
}
// Read the image.
PlanarImage input = JAI.create("fileload", args[0]);
// Invert the image.
PlanarImage output = JAI.create("invert", input);
// Create a JFrame for displaying the results.
JFrame frame = new JFrame();
frame.setTitle("Invert image "+args[0]);
// Add to the JFrame?s ContentPane an instance of DisplayTwoSynchronized-
// Images, which will contain the original and processed image.
frame.getContentPane().add(new DisplayTwoSynchronizedImages(input,output));
// Set the closing operation so the application is finished.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack(); // adjust the frame size using preferred dimensions.
frame.setVisible(true); // show the frame.
}
}