我的SWT与数字图像处理总结(2)—使用JFreeChart生成灰度直方图
1.使用JFreeChart生成灰度直方图
原图 灰度直方图
![](https://images.cnblogs.com/cnblogs_com/yinger/201111/201111052357354313.png)
[刚刚发现,这个直方图还是可以放大的!拖动鼠标不动向右划即可放大,如果向左可以复原]
2.灰度值的获取:正确的和错误的方法
我的方法错误的原因:
图像的颜色模型有很多种,包括常见的RGB,CMY(K),HSB...但是还有一些模型,比如YUV,Lab模型,它们之间的转换肯定是各有区别的!
我只是知道书上说B应该是0-255之间的值,但是swt的API中RGB类只有getHSB方法,心想B都是Brightness!但是是有区别的
HSB中得到的B的范围是0-1之间,而H是0-255之间,所以我就觉得H是我想要的值,所以结果是错的!H是Hue,这个不会错的!不是Brightness
代码:
private void calculateHistInfo(Image img) {
if (histArray == null)
histArray = new int[256];
for (int i = 0; i < 256; i++) {
histArray[i] = 0;
}
ImageData ideaImageData = img.getImageData();
byte[] pixelData = ideaImageData.data;// The pixel data of the image.
if (pixelData == null) {// pixelData要不为null
System.out.println("--------");
} else {
System.out.println(pixelData.length);
}
// System.out.println(img.getImageData().palette.isDirect);// true
int redMask = ideaImageData.palette.redMask;
int blueMask = ideaImageData.palette.blueMask;
int greenMask = ideaImageData.palette.greenMask;
// 以海豚图片为例的结果
// System.out.println("red:"+redMask);//red:255
// System.out.println("blue:"+blueMask);//blue:16711680
// System.out.println("green:"+greenMask);//green:65280
int[] lineData = new int[ideaImageData.width];
for (int y = 0; y < ideaImageData.height; y++) {
// 首先是得到每行的像素值,保存到int数组lineData中
ideaImageData.getPixels(0, y, ideaImageData.width, lineData, 0);
for (int x = 0; x < lineData.length; x++) {
int pixelValue = lineData[x];
int r = pixelValue & redMask;
int g = (pixelValue & greenMask) >> 8;
int b = (pixelValue & blueMask) >> 16;
//参考的方法:正确!
double temp = (double) (0.3 * r + 0.59 * g + 0.11 * b);
int h = (int) (temp) + ((temp - (int) (temp)) > 0.5 ? 1 : 0);
h = h < 0 ? 0 : h;
h = h > 255 ? 255 : h;
//我的方法:得到h
// float[] hsb = new RGB(r, g, b).getHSB();
// int h = (int) hsb[0] + 1;
// if (h < 0) {
// h = 0;
// } else if (h > 255) {
// h = 255;
// }
histArray[h]++;
}
}
}
if (histArray == null)
histArray = new int[256];
for (int i = 0; i < 256; i++) {
histArray[i] = 0;
}
ImageData ideaImageData = img.getImageData();
byte[] pixelData = ideaImageData.data;// The pixel data of the image.
if (pixelData == null) {// pixelData要不为null
System.out.println("--------");
} else {
System.out.println(pixelData.length);
}
// System.out.println(img.getImageData().palette.isDirect);// true
int redMask = ideaImageData.palette.redMask;
int blueMask = ideaImageData.palette.blueMask;
int greenMask = ideaImageData.palette.greenMask;
// 以海豚图片为例的结果
// System.out.println("red:"+redMask);//red:255
// System.out.println("blue:"+blueMask);//blue:16711680
// System.out.println("green:"+greenMask);//green:65280
int[] lineData = new int[ideaImageData.width];
for (int y = 0; y < ideaImageData.height; y++) {
// 首先是得到每行的像素值,保存到int数组lineData中
ideaImageData.getPixels(0, y, ideaImageData.width, lineData, 0);
for (int x = 0; x < lineData.length; x++) {
int pixelValue = lineData[x];
int r = pixelValue & redMask;
int g = (pixelValue & greenMask) >> 8;
int b = (pixelValue & blueMask) >> 16;
//参考的方法:正确!
double temp = (double) (0.3 * r + 0.59 * g + 0.11 * b);
int h = (int) (temp) + ((temp - (int) (temp)) > 0.5 ? 1 : 0);
h = h < 0 ? 0 : h;
h = h > 255 ? 255 : h;
//我的方法:得到h
// float[] hsb = new RGB(r, g, b).getHSB();
// int h = (int) hsb[0] + 1;
// if (h < 0) {
// h = 0;
// } else if (h > 255) {
// h = 255;
// }
histArray[h]++;
}
}
}
3.显示直方图:将ChartPanel整合到SWT中的解决方案
使用:SWT_AWT (它可以帮助我们在SWT中整合AWT和Swing的组件)
ChartPanel是继承自javax.swing.JPanel的,不能直接放置到SWT的Composite中,但是可以添加到Swing的panel中,
这个时候就要变相处理,利用SWT_AWT,在SWT中创建AWT的Frame,然后将ChartPanel添加到Frame的Panel上即可!
代码:
private void createContents(Shell shell) {
Composite composite = new Composite(shell, SWT.NONE);
composite.setLayout(new FillLayout());
Composite composite_1 = new Composite(composite, SWT.EMBEDDED);
Frame frame = SWT_AWT.new_Frame(composite_1);//关键之处!
Panel panel = new Panel();
frame.add(panel);
panel.setLayout(new BorderLayout(0, 0));
ChartPanel chartPanel = new ChartPanel(chart);
panel.add(chartPanel);
}
Composite composite = new Composite(shell, SWT.NONE);
composite.setLayout(new FillLayout());
Composite composite_1 = new Composite(composite, SWT.EMBEDDED);
Frame frame = SWT_AWT.new_Frame(composite_1);//关键之处!
Panel panel = new Panel();
frame.add(panel);
panel.setLayout(new BorderLayout(0, 0));
ChartPanel chartPanel = new ChartPanel(chart);
panel.add(chartPanel);
}
4.绘制直方图
主应用程序中:
int[] histArray = new int[256];
Histogram histogram = Histogram.getInstance();
protected void showHistogram(Image img) {
if (img == null) {
return;
}
calculateHistInfo(img);
createHistogram();
showHistogramDialog();
}
private void calculateHistInfo(Image img) {
if (histArray == null)
histArray = new int[256];
for (int i = 0; i < 256; i++) {
histArray[i] = 0;
}
ImageData ideaImageData = img.getImageData();
// The pixel data of the image.
byte[] pixelData = ideaImageData.data;
int redMask = ideaImageData.palette.redMask;
int blueMask = ideaImageData.palette.blueMask;
int greenMask = ideaImageData.palette.greenMask;
int h = 0;
int pixelValue =0;
int[] lineData = new int[ideaImageData.width];
for (int y = 0; y < ideaImageData.height; y++) {
// 首先是得到每行的像素值,保存到int数组lineData中
ideaImageData.getPixels(0, y, ideaImageData.width, lineData, 0);
for (int x = 0; x < lineData.length; x++) {
//得到像素值
pixelValue = lineData[x];
//根据像素值得到RGB的值
int r = pixelValue & redMask;
int g = (pixelValue & greenMask) >> 8;
int b = (pixelValue & blueMask) >> 16;
//根据RGB的值得到亮度(或者intensity)
double temp = (double) (0.3 * r + 0.59 * g + 0.11 * b);
h = (int) (temp) + ((temp - (int) (temp)) > 0.5 ? 1 : 0);
h = h < 0 ? 0 : h;
h = h > 255 ? 255 : h;
histArray[h]++;
}
}
}
private void createHistogram() {
// 1.生成绘图类对象,已经存在了
double count = imgsrc.getImageData().width * imgsrc.getImageData().height;
// System.out.println(count);//1920000.0 还是int范围内
// 2.添加数据
for (int i = 0; i < histArray.length; i++) {
// histogram.addData(String.valueOf(i), 100.0 * histArray[i] / count , "Histogram");//注意:如果设置了数据精度,这里不需要乘以100
histogram.addData(String.valueOf(i), histArray[i] / count, "Histogram");
//注意:这里的第一个参数一定要有!而且是不同的!貌似它的道理类似于HashMap
//第二个要注意的就是数据类型:传递double型!
//我希望在这里添加一个功能,能够随着显示出当前的颜色!
}
// 3.设置图片的初始化属性
histogram.init();
// 4.设置这个图片的属性
histogram.setTitle("灰度直方图");
histogram.setXTitle("灰度值");
histogram.setYTitle("百分比");
histogram.setBgcolor(Color.WHITE);
histogram.setIsV(true);
histogram.setWidth(800);
histogram.setHeight(600);
histogram.setMargin(0.1);
histogram.setXFontSize(10);
histogram.setYFontSize(10);
// 5.保存图片
}
private void showHistogramDialog() {
JFreeChart chart = null;
if (histogram.isV() == true) {
chart = ChartFactory.createBarChart(histogram.getTitle(), histogram.getXTitle(), histogram.getYTitle(), histogram.getDataset(),
PlotOrientation.VERTICAL, false, false, false);
} else {
chart = ChartFactory.createBarChart(histogram.getTitle(), histogram.getXTitle(), histogram.getYTitle(), histogram.getDataset(),
PlotOrientation.HORIZONTAL, false, false, false);
}
CategoryPlot categoryplot = chart.getCategoryPlot();
categoryplot.setRangeGridlinesVisible(true);//设置横虚线可见
categoryplot.setRangeGridlinePaint(Color.YELLOW);
// 设置X轴
CategoryAxis categoryaxis = categoryplot.getDomainAxis();
categoryaxis.setCategoryMargin(histogram.getMargin());//设置边距
chart.setBackgroundPaint(histogram.getBgcolor()); // 设置背景颜色
categoryaxis.setTickLabelFont(new Font("black", Font.BOLD, histogram.getXsz()));
// categoryaxis.setLowerMargin(10);//不要设置这个,会报错,字符串越界!
// categoryaxis.setUpperMargin(10);
// 设置Y轴
NumberAxis numAxis = (NumberAxis) categoryplot.getRangeAxis();
DecimalFormat decimalFormat = new DecimalFormat("0.00%");
numAxis.setNumberFormatOverride(decimalFormat);//设置数据精度
numAxis.setTickLabelFont(new Font("black", Font.BOLD, histogram.getYsz()));
// numAxis.setLowerMargin(10);
// numAxis.setUpperMargin(10);
// 设置bar的属性
BarRenderer renderer = new BarRenderer();
renderer.setItemMargin(0.2);
// for(int i=0;i<256;i++){
// renderer.setSeriesPaint(i, new Color(i, i, i));
// }
categoryplot.setRenderer(renderer);
//显示Dialog,显示直方图
new HistogramDialog(getShell(), chart).open();
}
Histogram histogram = Histogram.getInstance();
protected void showHistogram(Image img) {
if (img == null) {
return;
}
calculateHistInfo(img);
createHistogram();
showHistogramDialog();
}
private void calculateHistInfo(Image img) {
if (histArray == null)
histArray = new int[256];
for (int i = 0; i < 256; i++) {
histArray[i] = 0;
}
ImageData ideaImageData = img.getImageData();
// The pixel data of the image.
byte[] pixelData = ideaImageData.data;
int redMask = ideaImageData.palette.redMask;
int blueMask = ideaImageData.palette.blueMask;
int greenMask = ideaImageData.palette.greenMask;
int h = 0;
int pixelValue =0;
int[] lineData = new int[ideaImageData.width];
for (int y = 0; y < ideaImageData.height; y++) {
// 首先是得到每行的像素值,保存到int数组lineData中
ideaImageData.getPixels(0, y, ideaImageData.width, lineData, 0);
for (int x = 0; x < lineData.length; x++) {
//得到像素值
pixelValue = lineData[x];
//根据像素值得到RGB的值
int r = pixelValue & redMask;
int g = (pixelValue & greenMask) >> 8;
int b = (pixelValue & blueMask) >> 16;
//根据RGB的值得到亮度(或者intensity)
double temp = (double) (0.3 * r + 0.59 * g + 0.11 * b);
h = (int) (temp) + ((temp - (int) (temp)) > 0.5 ? 1 : 0);
h = h < 0 ? 0 : h;
h = h > 255 ? 255 : h;
histArray[h]++;
}
}
}
private void createHistogram() {
// 1.生成绘图类对象,已经存在了
double count = imgsrc.getImageData().width * imgsrc.getImageData().height;
// System.out.println(count);//1920000.0 还是int范围内
// 2.添加数据
for (int i = 0; i < histArray.length; i++) {
// histogram.addData(String.valueOf(i), 100.0 * histArray[i] / count , "Histogram");//注意:如果设置了数据精度,这里不需要乘以100
histogram.addData(String.valueOf(i), histArray[i] / count, "Histogram");
//注意:这里的第一个参数一定要有!而且是不同的!貌似它的道理类似于HashMap
//第二个要注意的就是数据类型:传递double型!
//我希望在这里添加一个功能,能够随着显示出当前的颜色!
}
// 3.设置图片的初始化属性
histogram.init();
// 4.设置这个图片的属性
histogram.setTitle("灰度直方图");
histogram.setXTitle("灰度值");
histogram.setYTitle("百分比");
histogram.setBgcolor(Color.WHITE);
histogram.setIsV(true);
histogram.setWidth(800);
histogram.setHeight(600);
histogram.setMargin(0.1);
histogram.setXFontSize(10);
histogram.setYFontSize(10);
// 5.保存图片
}
private void showHistogramDialog() {
JFreeChart chart = null;
if (histogram.isV() == true) {
chart = ChartFactory.createBarChart(histogram.getTitle(), histogram.getXTitle(), histogram.getYTitle(), histogram.getDataset(),
PlotOrientation.VERTICAL, false, false, false);
} else {
chart = ChartFactory.createBarChart(histogram.getTitle(), histogram.getXTitle(), histogram.getYTitle(), histogram.getDataset(),
PlotOrientation.HORIZONTAL, false, false, false);
}
CategoryPlot categoryplot = chart.getCategoryPlot();
categoryplot.setRangeGridlinesVisible(true);//设置横虚线可见
categoryplot.setRangeGridlinePaint(Color.YELLOW);
// 设置X轴
CategoryAxis categoryaxis = categoryplot.getDomainAxis();
categoryaxis.setCategoryMargin(histogram.getMargin());//设置边距
chart.setBackgroundPaint(histogram.getBgcolor()); // 设置背景颜色
categoryaxis.setTickLabelFont(new Font("black", Font.BOLD, histogram.getXsz()));
// categoryaxis.setLowerMargin(10);//不要设置这个,会报错,字符串越界!
// categoryaxis.setUpperMargin(10);
// 设置Y轴
NumberAxis numAxis = (NumberAxis) categoryplot.getRangeAxis();
DecimalFormat decimalFormat = new DecimalFormat("0.00%");
numAxis.setNumberFormatOverride(decimalFormat);//设置数据精度
numAxis.setTickLabelFont(new Font("black", Font.BOLD, histogram.getYsz()));
// numAxis.setLowerMargin(10);
// numAxis.setUpperMargin(10);
// 设置bar的属性
BarRenderer renderer = new BarRenderer();
renderer.setItemMargin(0.2);
// for(int i=0;i<256;i++){
// renderer.setSeriesPaint(i, new Color(i, i, i));
// }
categoryplot.setRenderer(renderer);
//显示Dialog,显示直方图
new HistogramDialog(getShell(), chart).open();
}
直方图类:Histogram.java
import java.awt.Color;
import java.awt.Font;
import java.io.FileOutputStream;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
public class Histogram {
private String title = ""; // 图片标题
private String XTitle = ""; // 图片横坐标标题
private String YTitle = ""; // 图片垂直坐标标题
private int Xsz = 10; // X轴标尺字体大小
private int Ysz = 10; // X轴标尺字体大小
private Color bgcolor = null; // 图片背景颜色
private int width = 800; // 要生成的图片的宽度
private int height = 600; // 要生成的图片的高度
private double margin = 0.2; // 每组柱间的间距 0--1之间
private boolean isV = true; // 柱图显示方式:0:垂直 1:水平显示
private String fileName = ""; // 图片名称(可以加路经)
private DefaultCategoryDataset dataset = null; // 显示图片需用的数据集
private FileOutputStream fosJpg = null; // 生成图片是用到的输出流
private static Histogram instance = null;
//测试的main方法
public static void main(String[] args) {
// 1.生成绘图类对象
Histogram test = Histogram.getInstance();
// 2.添加数据
test.addData("苹果", 100, "北京");
test.addData("西红柿", 300, "北京");
test.addData("黄瓜", 200, "北京");
test.addData("波罗", 400, "北京");
test.addData("桃子", 500, "北京");
test.addData("荔枝", -300, "北京");
test.addData("橡胶", 300, "北京");
test.addData("橘子", 200, "北京");
test.addData("苹果", 300, "上海");
test.addData("西红柿", 200, "上海");
test.addData("黄瓜", -400, "上海");
test.addData("波罗", 200, "上海");
test.addData("桃子", -300, "上海");
test.addData("荔枝", 500, "上海");
test.addData("橡胶", 300, "上海");
test.addData("橘子", 400, "上海");
// 3.设置图片的初始化属性
test.init();
// 4.设置这个图片的属性
test.setTitle("水果价格柱状图");
test.setYTitle("水果价格");
test.setXTitle("地点");
// test.setBgColor("white");
test.setBgcolor(Color.WHITE);
test.setIsV(true);
test.setWidth(600);
test.setMargin(0.1);
test.setHeight(500);
test.setXFontSize(10);
test.setYFontSize(10);
// 5.保存图片
test.saveAbs("e:\\DrawBar.jpg");
}
/**
* 单态模式生成类对象
*/
public static synchronized Histogram getInstance() {
if (instance == null)
instance = new Histogram();
return instance;
}
/**
* 添加要进行画柱状图的数据
*/
public void addData(String name, double value, String group) {
if (dataset != null) {
dataset.addValue(value, group, name);//double value, Comparable rowKey, Comparable columnKey
} else {
dataset = new DefaultCategoryDataset();
dataset.addValue(value, group, name);
}
}
/**
* 初始化参数
*/
public void init() {
setTitle("柱状图");
setXTitle("横标题");
setYTitle("纵标题");
setXFontSize(10);
setYFontSize(10);
setWidth(800);
setHeight(600);
setMargin(0.1);
setIsV(true);
setFileName("temp.jpg");
setBgcolor(255, 255, 255);
}
/**
* 按文件路径保存生成柱状图 保存文件名称 文件名称为(使用路径为): d:\\web\test.jpg
*/
public boolean saveAbs(String fileName) {
if (!fileName.equals("temp.jpg")) {
this.setFileName(fileName);
}
if (dataset == null) {
return false;
} else {
JFreeChart chart = null;
if (isV == true) {
// chart = ChartFactory.createBarChart3D(this.title, this.XTitle, this.YTitle, dataset, PlotOrientation.VERTICAL, true, false, false);
chart = ChartFactory.createBarChart(this.title, this.XTitle, this.YTitle, dataset, PlotOrientation.VERTICAL, true, false, false);
} else {
chart = ChartFactory.createBarChart(this.title, this.XTitle, this.YTitle, dataset, PlotOrientation.HORIZONTAL, true, false, false);
// chart = ChartFactory.createBarChart3D(this.title, this.XTitle, this.YTitle, dataset, PlotOrientation.HORIZONTAL, true, false, false);
}
CategoryPlot categoryplot = chart.getCategoryPlot();
CategoryAxis categoryaxis = categoryplot.getDomainAxis();
categoryaxis.setCategoryMargin(this.margin);
chart.setBackgroundPaint(this.bgcolor); // 设置背景颜色
// 设置Y轴
NumberAxis numAxis = (NumberAxis) categoryplot.getRangeAxis();
numAxis.setTickLabelFont(new Font("black", Font.ITALIC, this.Ysz));
// 设置X轴
categoryaxis.setTickLabelFont(new Font("black", Font.ITALIC, this.Xsz));
try {
fosJpg = new FileOutputStream(fileName);
ChartUtilities.writeChartAsJPEG(fosJpg, 100, chart, this.width, this.height, null);
} catch (Exception e) {
} finally {
this.dataset.clear();
try {
fosJpg.close();
} catch (Exception e) {
}
}
return true;
}
}
/**
* 要显示的文件的名称(包括文件路径)
*/
public String show() {
return fileName;
}
/**
* 恢复成员变量为初始状态
*/
public void reset() {
dataset.clear();
init();
}
//getters and setters
}
import java.awt.Font;
import java.io.FileOutputStream;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
public class Histogram {
private String title = ""; // 图片标题
private String XTitle = ""; // 图片横坐标标题
private String YTitle = ""; // 图片垂直坐标标题
private int Xsz = 10; // X轴标尺字体大小
private int Ysz = 10; // X轴标尺字体大小
private Color bgcolor = null; // 图片背景颜色
private int width = 800; // 要生成的图片的宽度
private int height = 600; // 要生成的图片的高度
private double margin = 0.2; // 每组柱间的间距 0--1之间
private boolean isV = true; // 柱图显示方式:0:垂直 1:水平显示
private String fileName = ""; // 图片名称(可以加路经)
private DefaultCategoryDataset dataset = null; // 显示图片需用的数据集
private FileOutputStream fosJpg = null; // 生成图片是用到的输出流
private static Histogram instance = null;
//测试的main方法
public static void main(String[] args) {
// 1.生成绘图类对象
Histogram test = Histogram.getInstance();
// 2.添加数据
test.addData("苹果", 100, "北京");
test.addData("西红柿", 300, "北京");
test.addData("黄瓜", 200, "北京");
test.addData("波罗", 400, "北京");
test.addData("桃子", 500, "北京");
test.addData("荔枝", -300, "北京");
test.addData("橡胶", 300, "北京");
test.addData("橘子", 200, "北京");
test.addData("苹果", 300, "上海");
test.addData("西红柿", 200, "上海");
test.addData("黄瓜", -400, "上海");
test.addData("波罗", 200, "上海");
test.addData("桃子", -300, "上海");
test.addData("荔枝", 500, "上海");
test.addData("橡胶", 300, "上海");
test.addData("橘子", 400, "上海");
// 3.设置图片的初始化属性
test.init();
// 4.设置这个图片的属性
test.setTitle("水果价格柱状图");
test.setYTitle("水果价格");
test.setXTitle("地点");
// test.setBgColor("white");
test.setBgcolor(Color.WHITE);
test.setIsV(true);
test.setWidth(600);
test.setMargin(0.1);
test.setHeight(500);
test.setXFontSize(10);
test.setYFontSize(10);
// 5.保存图片
test.saveAbs("e:\\DrawBar.jpg");
}
/**
* 单态模式生成类对象
*/
public static synchronized Histogram getInstance() {
if (instance == null)
instance = new Histogram();
return instance;
}
/**
* 添加要进行画柱状图的数据
*/
public void addData(String name, double value, String group) {
if (dataset != null) {
dataset.addValue(value, group, name);//double value, Comparable rowKey, Comparable columnKey
} else {
dataset = new DefaultCategoryDataset();
dataset.addValue(value, group, name);
}
}
/**
* 初始化参数
*/
public void init() {
setTitle("柱状图");
setXTitle("横标题");
setYTitle("纵标题");
setXFontSize(10);
setYFontSize(10);
setWidth(800);
setHeight(600);
setMargin(0.1);
setIsV(true);
setFileName("temp.jpg");
setBgcolor(255, 255, 255);
}
/**
* 按文件路径保存生成柱状图 保存文件名称 文件名称为(使用路径为): d:\\web\test.jpg
*/
public boolean saveAbs(String fileName) {
if (!fileName.equals("temp.jpg")) {
this.setFileName(fileName);
}
if (dataset == null) {
return false;
} else {
JFreeChart chart = null;
if (isV == true) {
// chart = ChartFactory.createBarChart3D(this.title, this.XTitle, this.YTitle, dataset, PlotOrientation.VERTICAL, true, false, false);
chart = ChartFactory.createBarChart(this.title, this.XTitle, this.YTitle, dataset, PlotOrientation.VERTICAL, true, false, false);
} else {
chart = ChartFactory.createBarChart(this.title, this.XTitle, this.YTitle, dataset, PlotOrientation.HORIZONTAL, true, false, false);
// chart = ChartFactory.createBarChart3D(this.title, this.XTitle, this.YTitle, dataset, PlotOrientation.HORIZONTAL, true, false, false);
}
CategoryPlot categoryplot = chart.getCategoryPlot();
CategoryAxis categoryaxis = categoryplot.getDomainAxis();
categoryaxis.setCategoryMargin(this.margin);
chart.setBackgroundPaint(this.bgcolor); // 设置背景颜色
// 设置Y轴
NumberAxis numAxis = (NumberAxis) categoryplot.getRangeAxis();
numAxis.setTickLabelFont(new Font("black", Font.ITALIC, this.Ysz));
// 设置X轴
categoryaxis.setTickLabelFont(new Font("black", Font.ITALIC, this.Xsz));
try {
fosJpg = new FileOutputStream(fileName);
ChartUtilities.writeChartAsJPEG(fosJpg, 100, chart, this.width, this.height, null);
} catch (Exception e) {
} finally {
this.dataset.clear();
try {
fosJpg.close();
} catch (Exception e) {
}
}
return true;
}
}
/**
* 要显示的文件的名称(包括文件路径)
*/
public String show() {
return fileName;
}
/**
* 恢复成员变量为初始状态
*/
public void reset() {
dataset.clear();
init();
}
//getters and setters
}
注:以上不是最终的代码,呵呵呵,一切还在更新当中!