Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package cglabsample.ui; import Catalano.Imaging.FastBitmap; import Catalano.Imaging.Tools.ImageStatistics; import Catalano.Statistics.Histogram; import cglabsample.ISubscriber; import java.awt.Dimension; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; /** * * @author Jackson */ public class HistogramWindow extends javax.swing.JFrame implements ISubscriber { private MainWindow mainWindow; private FastBitmap image; /** * Creates new form HistogramWindow */ public HistogramWindow() { initComponents(); //validate(); } public HistogramWindow(MainWindow parent) { this.mainWindow = parent; update(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { setType(java.awt.Window.Type.POPUP); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 400, Short.MAX_VALUE)); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 300, Short.MAX_VALUE)); pack(); }// </editor-fold>//GEN-END:initComponents /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(HistogramWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(HistogramWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(HistogramWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(HistogramWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new HistogramWindow().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables @Override public void update() { this.image = this.mainWindow.getImage(); updateHistogram(); repaint(); this.revalidate(); } private void updateHistogram() { if (!image.isGrayscale()) { image.toGrayscale(); } ImageStatistics is = new ImageStatistics(image); Histogram h = is.getHistogramGray(); double[] hvalues = new double[256]; int[] hivalues = h.getValues(); for (int i = 0; i < hivalues.length; i++) { hvalues[i] = (double) hivalues[i]; } // HistogramDataset dataset = new HistogramDataset(); // dataset.setType(HistogramType.FREQUENCY); // dataset.addSeries("Histograma", hvalues, 256); // String plotTitle = "Histograma"; // String xaxis = "intensidade"; // String yaxis = "frequencia"; // PlotOrientation orientation = PlotOrientation.VERTICAL; // boolean show = false; // boolean toolTips = false; // boolean urls = false; // JFreeChart chart = ChartFactory.createHistogram(plotTitle, xaxis, yaxis, // dataset, orientation, show, toolTips, urls); // ChartPanel cp = new ChartPanel(chart); // setContentPane(cp); DefaultCategoryDataset dataset = new DefaultCategoryDataset(); for (int i = 0; i < 256; i++) { dataset.addValue(hvalues[i], "Histograma", "Histograma" + i); } String plotTitle = "Histograma"; String xaxis = "intensidade"; String yaxis = "frequencia"; PlotOrientation orientation = PlotOrientation.VERTICAL; boolean show = false; boolean toolTips = false; boolean urls = false; JFreeChart chart = ChartFactory.createBarChart(plotTitle, xaxis, yaxis, dataset, orientation, show, toolTips, urls); ChartPanel cp = new ChartPanel(chart); cp.setPreferredSize(new Dimension(500, 270)); setContentPane(cp); } }