Histogram producing unreasonable color values
Hi all,
I've written an RGB histogram color routine that'll display histogram values. Unfortunately, the number of histogram values (displayed on the "x axis") gets incredibly high (>1,000,000). I'm sure this has something to do with a couple of nested "for" loops, but I'm not clear what. The "heart" of the code is posted below. Any help or ideas are appreciated.
privateint[][] getHist(BufferedImage bi){
int[] bins ={256};
double[] low ={0.0D};
double[] high ={10000.0D};
Histogram hist =new Histogram(bins, low, high);
ParameterBlock pb =new ParameterBlock();
pb.addSource(bi);
pb.add(null);
pb.add(1);
pb.add(1);
RenderedOp op = JAI.create("histogram", pb,null);
hist = (Histogram)op.getProperty("histogram");
int[][] data_array = hist.getBins();
return data_array;
}
[1512 byte] By [
jmarottaa] at [2007-11-26 17:09:51]

# 1
Woops, sorry. Forgot to post the second half of the code.
private BufferedImage[] showHists(int[][] intData){
int bins = intData[0].length;
double[][] data = new double[intData.length][bins];
for(int k = 0; k < intData.length; k++){
for (int i = 0; i < bins; i++){
data[k][i] = (double)intData[k][i];
}
}
HistogramDataset redDataSet = new HistogramDataset();
redDataSet.addSeries("red", data[0], bins);
HistogramDataset greenDataSet = new HistogramDataset();
greenDataSet.addSeries("green", data[1], bins);
HistogramDataset blueDataSet = new HistogramDataset();
blueDataSet.addSeries("blue", data[2], bins);
JFreeChart redChart = ChartFactory.createHistogram(
"Red Band",
null,
null,
redDataSet,
PlotOrientation.VERTICAL,
true,
true,
false);
JFreeChart greenChart = ChartFactory.createHistogram(
"Green Band",
null,
null,
greenDataSet,
PlotOrientation.VERTICAL,
true,
true,
false
);
JFreeChart blueChart = ChartFactory.createHistogram(
"Blue Band",
null,
null,
blueDataSet,
PlotOrientation.VERTICAL,
true,
true,
false
);
XYPlot redPlot = (XYPlot) redChart.getPlot();
redPlot.setForegroundAlpha(0.85f);
//redPlot.getDomainAxis().setUpperBound(50000.0);
//redPlot.getRangeAxis().setUpperBound(300.0);
XYPlot greenPlot = (XYPlot) greenChart.getPlot();
greenPlot.setForegroundAlpha(0.85f);
XYPlot bluePlot = (XYPlot) blueChart.getPlot();
bluePlot.setForegroundAlpha(0.85f);
XYBarRenderer redRenderer = (XYBarRenderer) redPlot.getRenderer();
redRenderer.setDrawBarOutline(false);
redRenderer.setSeriesPaint(0, Color.red);
XYBarRenderer greenRenderer = (XYBarRenderer) greenPlot.getRenderer();
greenRenderer.setDrawBarOutline(false);
greenRenderer.setSeriesPaint(0, Color.green);
XYBarRenderer blueRenderer = (XYBarRenderer) bluePlot.getRenderer();
blueRenderer.setDrawBarOutline(false);
blueRenderer.setSeriesPaint(0, Color.blue);
BufferedImage[] img_array = new BufferedImage[3];
img_array[0] = redChart.createBufferedImage(200, 200);
img_array[1] = greenChart.createBufferedImage(200, 200);
img_array[2] = blueChart.createBufferedImage(200, 200);
return img_array;
}
Thanks again.