/* * PlotTools.hh * * Created on: 15 nov. 2013 * Author: guillaume */ #ifndef PLOTTOOLS_HH_ #define PLOTTOOLS_HH_ #include #include #include //#include class PlotTools { public: /** * @brief Convert SVG, PDF or PS file format to PNG format. * @return Return converted filename which contain input filename without input format( result.svg => result.png). */ static std::string convert2Png(const std::string pInputFile) { // Get input file format size_t pos = pInputFile.find_last_of("."); std::string lInputFormat = pInputFile.substr(pos + 1); // Copy input filename and replace format to "png". std::string lOutputFile = pInputFile; std::string lOutputFormat = "png"; lOutputFile.replace(pos + 1, lOutputFormat.size(), lOutputFormat); if (lInputFormat == "svg") { // rsvg can only convert svg format to png. std::system(std::string("rsvg-convert " + pInputFile + " -f png -o " + lOutputFile).c_str()); } else { // Ghostscript can only convert ps and pdf format to png. std::system(std::string("gs -r300x300 -sDEVICE=pngalpha -o " + lOutputFile + " " + pInputFile).c_str()); } return lOutputFile; } /** * @brief Calculate error rate between reference file and result file. * @note Files must be in PNG format and using RGB 8-bit color. * @return Return error rate in percent (it corresponds to proportion of wrong pixel). */ /*static double calculateErrorRate(std::string pReferenceFile, std::string pResultFile) { // Check if file exist if ( (access(pReferenceFile.c_str(), F_OK) == 0) && (access(pResultFile.c_str(), F_OK) == 0) ) { // Read file using namespace boost::gil; rgba8_image_t imRef; point2 lPointRef = png_read_dimensions(pReferenceFile); png_read_image(pReferenceFile, imRef); rgba8_pixel_t pixelRef; rgba8_image_t imRes; point2 lPointRes = png_read_dimensions(pResultFile); png_read_image(pResultFile, imRes); rgba8_pixel_t pixelRes; // Calculate error rate. int invPixel = 0; for (int x = 0; x != lPointRef.x; x++) { for (int y = 0; y != lPointRef.y; y++) { pixelRef = view(imRef)(x, y); pixelRes = view(imRes)(x, y); // TODO error rate can be improved by saying which element is wrong (Red, Green or blue) // and not pixel. // TODO error rate can also be improved by not taking into account pixel change from [255, 255, 255] to [0, 0, 0] and vice versa. if( ((int)pixelRef[0] != (int)pixelRes[0]) || ((int)pixelRef[1] != (int)pixelRes[1]) || ((int)pixelRef[2] != (int)pixelRes[2]) ) { invPixel ++; //std::cout<<"pixel {"<