package edu.mbl.jif.gui.imaging.array;
import edu.mbl.jif.gui.imaging.FrameImageDisplay;
import edu.mbl.jif.imaging.api.SeriesOfImages;
import edu.mbl.jif.imaging.series.SeriesOfImagesMultipageTiff;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.event.*;
/**
* <p>Title: </p> <p>Description: </p> <p>Copyright: Copyright (c) 2003</p> <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class ImageArrayDisplayPanel extends JPanel {
BorderLayout bLayout = new BorderLayout();
GridLayout gridLayout1 = new GridLayout();
JScrollPane scrollPane = new JScrollPane();
JPanel imageGrid = new JPanel();
JPanel status = new JPanel();
SeriesOfImages series;
JList list = new JList();
ElementZoomImage[] pZi;
int nZ = 1;
int nT = 1;
MyMouseListener myMouseListener = new MyMouseListener();
int sampling = -1;
public ImageArrayDisplayPanel(SeriesOfImages series) {
this(series, -1);
}
public ImageArrayDisplayPanel(SeriesOfImages series, int sampling) {
this.series = series;
this.sampling = sampling;
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
void jbInit() throws Exception {
// determine sampling if not specified
if (sampling == -1) {
// TODO Set sampling based on the number and dimension of images
int numImages = series.getNumImages();
series.getImageDimensions();
}
this.setLayout(bLayout);
this.setOpaque(true);
imageGrid.setBackground(Color.lightGray);
nT = series.getTimeIntervals();
nZ = series.getZSections();
imageGrid.setLayout(gridLayout1);
gridLayout1.setColumns(nT);
gridLayout1.setRows(nZ);
gridLayout1.setHgap(1);
gridLayout1.setVgap(1);
pZi = new ElementZoomImage[nZ * nT];
Dimension dim = series.getImageDimensions();
for (int z = 0; z < nZ; z++) {
for (int t = 0; t < nT; t++) {
try {
BufferedImage img = series.getAsThumbnail((t * nZ) + z, sampling);
if (img != null) {
pZi[z + t] = new ElementZoomImage(img, 1.0f, false);
imageGrid.add(pZi[z + t], null);
pZi[z + t].setT(t);
pZi[z + t].setZ(z);
pZi[z + t].addMouseListener(myMouseListener);
pZi[z + t].repaint();
} else {
System.err.println("Couldn't get thumbnail");
}
} catch (Exception ex) {
System.err.println("Exception");
}
}
}
scrollPane.getViewport().add(imageGrid, null);
this.add(scrollPane, BorderLayout.CENTER);
this.validate();
}
class MyMouseListener extends MouseInputAdapter {
public void mouseClicked(MouseEvent e) {
ElementZoomImage eZi = (ElementZoomImage) e.getSource();
System.out.println("z / t : " + eZi.getZ() + " / " + eZi.getT());
if (e.getClickCount() == 2) {
System.out.println(" double click");
int r = eZi.getZ();
int c = eZi.getT();
System.out.println(r + "," + c);
// Open the image in viewer...
openImageViewer(series, r, c);
}
// Popup Menu
// if (SwingUtilities.isRightMouseButton(e)) {
// //int index = list.locationToIndex(e.getPoint());
// popup.show(e.getComponent(), e.getX(), e.getY());
// }
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
private void openImageViewer(SeriesOfImages series, int r, int c) {
int n = r + c * series.getZSections();
String title = "" + series.getFilename() + ": " + r + ", " + c + " (" + n + ")";
BufferedImage img = series.getImage(n);
(new FrameImageDisplay(img, title)).setVisible(true);
}
public static void openInFrame(SeriesOfImages series) {
// ToDo Limit number of images to ?
int numImages = series.getNumImages();
int sampling = 5;
ImageArrayDisplayPanel p = new ImageArrayDisplayPanel(series, sampling);
//p.setImage(image, 0.1f);
p.setPreferredSize(new Dimension(300, 300));
JFrame zoomwin = new JFrame();
zoomwin.getContentPane().setLayout(new BorderLayout());
zoomwin.getContentPane().add(p, BorderLayout.CENTER);
zoomwin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
zoomwin.pack();
zoomwin.setVisible(true);
}
public static void main(String[] args) {
// String FILE = edu.mbl.jif.Constants.testDataPath +
// "Series_TZ\\STMPS_Yuki_TZ_04_0428_1427_41_Z-5.tif";
// "lightfield\\PollenLView850.tif";
//"Series_TZ\\STAPS_04_0621_1451_54.tif";
//"Series_TZ\\xyzt-200x200x10x15_b.tif";
//"Series_TZ\\31Aug95.Newt3Lamellap.tif";
String FILE = "./test-images/Z5_T10.tif";
int zSections = 5;
//String FILE = "./test-images/HyperStack.tif";
SeriesOfImages series = new SeriesOfImagesMultipageTiff(FILE, zSections);
ImageArrayDisplayPanel.openInFrame(series);
}
}