import javax.swing.*;
import javax.media.jai.*;
import java.awt.*;
import java.awt.geom.*;
import javax.imageio.stream.*;
import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
import java.awt.image.renderable.*;
import java.awt.event.*;
import javax.media.jai.iterator.*;

import com.sun.media.imageio.stream.*;


public class MainFrame extends JFrame {
    PlanarImage image = null;
    public MainFrame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        ImageComponent imageComponent = new ImageComponent(this);
        panel.add(imageComponent);
        setContentPane(panel);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new MainFrame();
    }
}

class ImageComponent extends JComponent  implements MouseMotionListener {
    PlanarImage image;
    JFrame frame;
    Robot robot;
    RandomIter iter;
    public ImageComponent(JFrame frame) {
        this.frame = frame;
        setPreferredSize(new Dimension(300,30));
        addMouseMotionListener(this);
        try {
            FileImageInputStream fcs = new FileImageInputStream(new File("test.raw"));
            int[] bandoff = {0} ;
            int[] bits = {8};
            long[] ll = {0};
            int width = 256;
            int height = 10;
            Dimension[] dd = { new Dimension(width, height)};
            SampleModel sampleModel = new ComponentSampleModel(DataBuffer.TYPE_BYTE, width, 1, 1, width, bandoff);
//            ColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY), bits, false, false, 1, dataType);
            ColorModel colorModel = PlanarImage.createColorModel(sampleModel);
            ImageTypeSpecifier itype = new ImageTypeSpecifier(colorModel, sampleModel);
            RawImageInputStream rs = new RawImageInputStream(fcs, itype, ll, dd );

            ParameterBlock pb = new ParameterBlock();
            pb.add(rs);
            ImageLayout il = new ImageLayout();
            il.setTileHeight( 1 );
            RenderingHints hints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, il);
            image = JAI.create("ImageRead", pb, hints);

            robot = new Robot();
            iter = RandomIterFactory.create(image, null);
        }
        catch(Exception ex) {
            System.out.println(ex);
        }

    }
    public void paintComponent(Graphics g) {
        if ( image == null ) {
            return;
        }
        Graphics2D g2D = (Graphics2D)g;
        g2D.drawRenderedImage(image, new AffineTransform());
    }

    public void mouseDragged(java.awt.event.MouseEvent mouseEvent) {
    }

    public void mouseMoved(java.awt.event.MouseEvent mouseEvent) {
        Point screenLocation = getLocationOnScreen();
        Point p = mouseEvent.getPoint();
        Color c = robot.getPixelColor(screenLocation.x + p.x, screenLocation.y+p.y);
        int value = -1;
        if ( p.x < 256 && p.y < 10 )
            value = iter.getSample(p.x, p.y, 0);
        frame.setTitle("x="+p.x+" y="+p.y+" screen="+c.getRed()+" image="+value);
    }

}
