/*
* Copyright (c) 2011-2016, Peter Abeles. All Rights Reserved.
*
* This file is part of BoofCV (http://boofcv.org).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package boofcv.gui.image;
import boofcv.alg.misc.GImageStatistics;
import boofcv.io.image.ConvertBufferedImage;
import boofcv.struct.image.ImageBase;
import boofcv.struct.image.ImageGray;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
/**
* Displays images in a new window.
*
* @author Peter Abeles
*/
public class ShowImages {
/**
* Creates a dialog window showing the specified image. The function will not
* exit until the user clicks ok
*/
public static void showDialog(BufferedImage img) {
ImageIcon icon = new ImageIcon();
icon.setImage(img);
JOptionPane.showMessageDialog(null, icon);
}
/**
* Shows a set of images in a grid pattern.
*
* @param numColumns How many columns are in the grid
* @param title Number of the window
* @param images List of images to show
* @return Display panel
*/
public static ImageGridPanel showGrid( int numColumns , String title , BufferedImage ...images ) {
JFrame frame = new JFrame(title);
int numRows = images.length/numColumns + images.length%numColumns;
ImageGridPanel panel = new ImageGridPanel(numRows,numColumns,images);
frame.add(panel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
return panel;
}
/**
* Creates a window showing the specified image.
*/
public static ImagePanel showWindow(BufferedImage img, String title) {
return showWindow(img,title,false);
}
/**
* Creates a window showing the specified image.
*/
public static ImagePanel showWindow(BufferedImage img, String title, boolean closeOnExit ) {
JFrame frame = new JFrame(title);
ImagePanel panel = new ImagePanel(img);
frame.add(panel, BorderLayout.CENTER);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
if( closeOnExit )
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
return panel;
}
public static ImagePanel showWindow( ImageBase img, String title ) {
BufferedImage buff = ConvertBufferedImage.convertTo(img,null,true);
return showWindow(buff,title);
}
public static JFrame showWindow( final JComponent component , String title ) {
return showWindow(component,title,false);
}
public static JFrame showWindow( final JComponent component , String title, final boolean closeOnExit ) {
final JFrame frame = new JFrame(title);
frame.add(component, BorderLayout.CENTER);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.pack();
frame.setVisible(true);
if( closeOnExit )
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
return frame;
}
public static ImagePanel showWindow(ImageGray img , String title , boolean showMagnitude) {
double max = GImageStatistics.maxAbs(img);
BufferedImage buff;
if( showMagnitude )
buff = VisualizeImageData.grayMagnitude(img,null,max);
else
buff = VisualizeImageData.colorizeSign(img,null,max);
return showWindow(buff,title);
}
}