将java SWT图表保存到图像
我有一个使用org.eclipse.swtchart()的java应用程序。我希望将输出的图表保存为.jpg或类似的图像格式,而不是显示图表,到目前为止,我不知道如何执行此操作。代码还没有完全完成,我打算让它监视CSV文件的特定文件,并从可用数据自动创建和保存图形将java SWT图表保存到图像,java,eclipse,save,swt,swtchart,Java,Eclipse,Save,Swt,Swtchart,我有一个使用org.eclipse.swtchart()的java应用程序。我希望将输出的图表保存为.jpg或类似的图像格式,而不是显示图表,到目前为止,我不知道如何执行此操作。代码还没有完全完成,我打算让它监视CSV文件的特定文件,并从可用数据自动创建和保存图形 import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite;[ente
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;[enter image description here][1]
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swtchart.Chart;
import org.eclipse.swtchart.IAxis;
import org.eclipse.swtchart.IAxisSet;
import org.eclipse.swtchart.IBarSeries;
import org.eclipse.swtchart.IGrid;
import org.eclipse.swtchart.ISeries.SeriesType;
import org.eclipse.swtchart.LineStyle;
import org.eclipse.swtchart.Range;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
public class CSVBarChart[enter image description here][1] {
private static double[] ySeries;
private static String [] xSeries;
/**
* The main method.
*
* @param args
* the arguments
*/
public static void main(String[] args) {
String csvFile = "C:\\Users\\Kevin\\Desktop\\FAD-Export\\42510149_10101764726495991_5660171154099273728_o.csv";
BufferedReader br = null;
String line = "";
String cvsSplitBy = ",";
try {
br = new BufferedReader(new FileReader(csvFile));
for (int i = 0; i < 1; i++)
br.readLine();
line = br.readLine();
// use comma as separator
String[] stringSeries = line.split(cvsSplitBy);
String[] xSeries1 = {"Face " + stringSeries[0],
"Condifence " + stringSeries[1],
"AU01 Inner Brow Raiser " + stringSeries[2],
"AU02 Outer Brow Raiser " + stringSeries[3],
"AU04 Brow Lowerer " + stringSeries[4],
"AU05 Upper Lid Raiser " + stringSeries[5],
"AU06 Cheek Raiser " + stringSeries[6],
"AU07 Lid Tightener " + stringSeries[7],
"AU09 Nose Wrinkler " + stringSeries[8],
"AU10 Upper Lip Raiser " + stringSeries[9],
"AU12 Lip Corner Puller " + stringSeries[10],
"AU14 Dimpler " + stringSeries[11],
"AU15 Lip Corner Depressor " + stringSeries[12],
"AU17 Chin Raiser " + stringSeries[13],
"AU20 Lip Stretcher " + stringSeries[14],
"AU23 Lip Tightener " + stringSeries[15],
"AU25 Lips Part " + stringSeries[16],
"AU26 Jaw Drop " + stringSeries[17],
"AU45 Blink " + stringSeries[18]};
xSeries = xSeries1;
ySeries = Arrays.stream(stringSeries)
.mapToDouble(Double::parseDouble)
.toArray();
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("");
shell.setSize(900, 900);
shell.setLayout(new FillLayout());
createChart(shell);
shell.open();
while(!shell.isDisposed()) {
if(!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
/**
* create the chart.
*
* @param parent
* The parent composite
* @return The created chart
*/
static public Chart createChart(Composite parent) {
// create a chart
Chart chart = new Chart(parent, SWT.NONE);
chart.setOrientation(SWT.VERTICAL);
// set titles
chart.getTitle().setText("Bar Chart");
IAxis yAxis = chart.getAxisSet().getYAxis(0);
yAxis.setRange(new Range(0, 5));
IAxis xAxis = chart.getAxisSet().getXAxis(0);
xAxis.setCategorySeries(xSeries);
xAxis.enableCategory(true);
xAxis.setRange(new Range(2, 20));
IAxisSet axisSet = chart.getAxisSet();
IGrid xGrid = axisSet.getXAxis(0).getGrid();
xGrid.setStyle(LineStyle.NONE);
chart.getAxisSet().getXAxis(0).getTitle().setText("Action Units");
chart.getAxisSet().getYAxis(0).getTitle().setText("Intensity");
// create bar series
IBarSeries barSeries = (IBarSeries)chart.getSeriesSet().createSeries(SeriesType.BAR, "AU Intensity");
barSeries.setYSeries(ySeries);
return chart;
}
import org.eclipse.swt.swt;
导入org.eclipse.swt.layout.FillLayout;
导入org.eclipse.swt.widgets.Composite;[在此处输入图像描述][1]
导入org.eclipse.swt.widgets.Display;
导入org.eclipse.swt.widgets.Shell;
导入org.eclipse.swtchart.Chart;
导入org.eclipse.swtchart.IAxis;
导入org.eclipse.swtchart.IAxisSet;
导入org.eclipse.swtchart.IBarSeries;
导入org.eclipse.swtchart.IGrid;
导入org.eclipse.swtchart.ISeries.SeriesType;
导入org.eclipse.swtchart.LineStyle;
导入org.eclipse.swtchart.Range;
导入java.io.BufferedReader;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.array;
公共类CSVBarChart[在此处输入图像描述][1]{
私有静态双序列;
私有静态字符串[]x系列;
/**
*主要方法。
*
*@param args
*争论
*/
公共静态void main(字符串[]args){
String csvFile=“C:\\Users\\Kevin\\Desktop\\FAD Export\\42510149_10101764726495991_5660171154099273728_o.csv”;
BufferedReader br=null;
字符串行=”;
字符串cvsSplitBy=“,”;
试一试{
br=新的BufferedReader(新的文件读取器(csvFile));
对于(int i=0;i<1;i++)
br.readLine();
line=br.readLine();
//使用逗号作为分隔符
String[]stringSeries=line.split(cvsSplitBy);
字符串[]xSeries1={“面”+stringSeries[0],
“条件”+stringSeries[1],
“AU01内眉毛提升器”+stringSeries[2],
“AU02外眉毛提升器”+stringSeries[3],
“AU04降眉器”+stringSeries[4],
“AU05上盖升降器”+纵梁系列[5],
“AU06面颊提升器”+stringSeries[6],
“AU07盖紧器”+纵梁系列[7],
“AU09鼻子起皱器”+stringSeries[8],
“AU10上唇提升器”+纵梁系列[9],
“AU12唇角拉拔器”+纵梁系列[10],
“AU14酒窝”+stringSeries[11],
“AU15唇形拐角压具”+stringSeries[12],
“AU17 Chin Raiser”+stringSeries[13],
“AU20唇部拉伸器”+stringSeries[14],
“AU23唇型张紧器”+纵梁系列[15],
“AU25唇部”+stringSeries[16],
“AU26颚式下降”+stringSeries[17],
“AU45闪烁”+stringSeries[18]};
xSeries=xSeries1;
ySeries=Arrays.stream(stringSeries)
.mapToDouble(Double::parseDouble)
.toArray();
}
catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}最后{
如果(br!=null){
试一试{
br.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
显示=新显示();
外壳=新外壳(显示);
shell.setText(“”);
外壳尺寸(900900);
setLayout(新的FillLayout());
createChart(shell);
shell.open();
而(!shell.isDisposed()){
如果(!display.readAndDispatch()){
display.sleep();
}
}
display.dispose();
}
/**
*创建图表。
*
*@param父级
*父组合
*@返回已创建的图表
*/
静态公共图表createChart(复合父级){
//创建图表
图表=新图表(父级,SWT.NONE);
设置方向图(SWT垂直);
//设置标题
chart.getTitle().setText(“条形图”);
IAxis-yAxis=chart.getAxisSet().getYAxis(0);
设置范围(新范围(0,5));
IAxis xAxis=chart.getAxisSet().getXAxis(0);
xAxis.setCategorySeries(X系列);
xAxis.enableCategory(真);
设置范围(新范围(2,20));
IAxisSet axisSet=chart.getAxisSet();
IGrid xGrid=axisSet.getXAxis(0.getGrid();
xGrid.setStyle(LineStyle.NONE);
chart.getAxisSet().getXAxis(0.getTitle().setText(“动作单位”);
chart.getAxisSet().getYAxis(0.getTitle().setText(“强度”);
//创建酒吧系列
IBarSeries barSeries=(IBarSeries)chart.getSeriesSet().CreateSetries(serieType.BAR,“AU强度”);
barSeries.setYSeries(ySeries);
收益表;
}
}
图表
有一个保存
方法保存到file@greg-谢谢你!我不知道那是怎么逃过我的搜查的。为了解决这个问题,我将chart设置为一个字段,并添加了linechart.save(“barchart.jpeg”,SWT.IMAGE\ujpeg);在shell.open()下的主线程中;。我还设置shell.setVisible(false);就在chart.save下面。到目前为止,我还无法完全隐藏外壳,但这至少会持续1/2秒。