package edu.harvard.mcb.leschziner.util;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.googlecode.javacv.cpp.opencv_core;
import com.googlecode.javacv.cpp.opencv_core.CvMat;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import edu.harvard.mcb.leschziner.core.Particle;
public class DisplayUtils {
public static final int PADDING = 20;
// Where to place the next window on the screen
private static int windowX = 0;
private static int windowY = 0;
public static void displayMat(CvMat target) {
displayMat(target, "Mat " + target.hashCode());
}
public static void displayMat(CvMat target, String label) {
CvMat normalized = CvMat.create(target.rows(),
target.cols(),
target.type());
opencv_core.cvNormalize(target,
normalized,
0,
1,
opencv_core.CV_MINMAX,
null);
IplImage image = IplImage.create(target.cols(),
target.rows(),
8,
target.channels());
opencv_core.cvConvertScale(normalized, image, 255, 0);
displayImage(image.getBufferedImage(), label);
}
public static void displayParticle(Particle target) {
displayParticle(target, "Particle " + target.hashCode());
}
public static void displayParticle(Particle target, String label) {
displayImage(target.asBufferedImage(), label);
}
public static void displayImage(BufferedImage target) {
displayImage(target, "Image " + target.hashCode());
}
public static void displayImage(IplImage target, String label) {
displayImage(target.getBufferedImage(), label);
}
public static void displayImage(BufferedImage target, String label) {
Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
JFrame canvas = new JFrame(label);
JPanel panel = new JPanel();
JLabel icon = new JLabel(new ImageIcon(target));
panel.add(icon);
canvas.add(panel);
canvas.pack();
// Move the window to a nice place
canvas.setLocation(windowX, windowY);
windowX += canvas.getWidth() + PADDING;
if (windowX > screenDimension.width) {
windowX = 0;
windowY += canvas.getHeight() + PADDING;
}
if (windowY > screenDimension.height) {
windowY = 0;
}
canvas.setVisible(true);
}
}