2014-03-19 59 views
0

我想寫的結果gnuplot操作到PNG文件,這成功了,但我需要生成大約100 PNG文件,在這裏我遇到了問題,因爲我收到一個錯誤,「最大數量的臨時文件gnuplot是27「。當我使用方法remove_tmpfiles()時,所有圖像都可以正確生成,但其中大約20-30個是不可打開的。當我僅保存推薦的27張圖像時,不會出現此錯誤。Gnuplot保存很多圖像

Gnuplot::set_GNUPlotPath(GNUPLOT_PATH); 
Gnuplot *main_plot = new Gnuplot;  
main_plot->cmd("set terminal pngcairo\n"); 
for(int j=0; j<100;j++) 
{ 
rysuj_wagi(j, main_plot); 
if(j%25 == 0) main_plot->remove_tmpfiles(); 
} 


    void rysuj_wagi(int numer, Gnuplot * main_plot) 
{ 
    std::ostringstream oss; 
    oss <<"set output 'waga" << numer<<".png'"; 
    string output = oss.str(); 
    cout<<output; 
    main_plot->cmd(output); 
    main_plot->set_grid(); 
    main_plot->set_xrange(-5,5); 
    main_plot->set_yrange(-5,5); 
    main_plot->set_style("linespoints"); 
    main_plot->set_pointsize(1.0); 
    vector<double> x, y; 
    x.push_back(0); 
    y.push_back(0); 
    x.push_back(punktyWagX[numer]); 
    y.push_back(punktyWagY[numer]); 
    main_plot->reset_plot(); 
    main_plot->plot_xy(x, y); 
} 

你碰巧知道出路嗎?

+1

哪些文件無法打開?嘗試添加'main_plot-> cmd(「set output」);'在函數'rysuj_wagi'的末尾。只有在遇到新的'set output'文件名''時,Gnuplot纔會完成輸出文件。也許這會干擾'remove_tmpfiles()'。爲了避免這種情況發送'set output'(是的,沒有文件名)可能會有所幫助。 – Christoph

+1

它始終沒有創建關於每25個最後10個圖像。您的解決方案的作品,但我刪除temp_files()約4個100不可打開的情況下。我的想法是,它刪除temp_file過快,所以我強迫它睡一會兒(int j = 0; j <100; j ++) rysuj_wagi(j,main_plot);如果(j == 25 || j == 50 || j == 75)(\t \t main_plot-> remove_tmpfiles(); } },這也適用。感謝您的努力。 – Maximus

回答

0

它看起來像你使用這個API:http://jfi.uchicago.edu/~tcaswell/track_doc/classgnuplot_1_1Gnuplot.html

你有沒有嘗試過這樣的事情:

main_plot->cmd("set terminal pngcairo\n");   
//some setting of YOUR_FILENAME 
main_plot->cmd("set output 'YOUR_FILENAME'\n"); 
main_plot->cmd("replot\n"); 

你可能希望避免臨時文件都在一起。

+0

它仍然不起作用,引發同樣的錯誤。 – Maximus