2017-05-30 2 views
0

Je tente de générer des carreaux de carte à partir d'un générateur de monde que j'ai adapté à l'aide de libnoise. En utilisant les méthodes d'économie libnoise fonctionnent très bien, mais en essayant d'échelle et rogner des images à l'aide CImg, je reçois l'erreur suivante:Erreur lors de la tentative de sauvegarde de l'image avec CImg

[CImg] *** CImgIOException *** cimg::fopen(): Failed to open file '~/tiles/0/0/0.bmp' with mode 'wb'. 

méthode pertinente:

void makeTile(CImg<unsigned char> image, int zoom, int x, int y, int depth, int argc, char* argv[]) { 
    std::string directoryBase = "mkdir -p ~/tiles/" + boost::lexical_cast<std::string>(zoom); 
    std::string directory = directoryBase + "/" + boost::lexical_cast<std::string>(x); 
    std::string filename = "~/tiles/" + boost::lexical_cast<std::string>(zoom) + "/" + boost::lexical_cast<std::string>(x) + "/" + boost::lexical_cast<std::string>(y) + ".bmp"; 

    const char* file_o = cimg_option("-o", filename.c_str(), "Output file"); 
    system(directoryBase.c_str()); 
    system(directory.c_str()); 
    std::cout << "Made required dirs\n"; 
    CImg<unsigned char> imageClone = image.get_resize(256, 256, -100, -100, 1); 

    std::cout << "scaled image\n"; 
    imageClone.save(file_o); 

    if (depth > 0) { 
     int smallX = x * 2; 
     int smallY = y * 2; 
     makeTile(image.get_crop(0, 0, image._width/2, image._height/2), zoom + 1, smallX, smallY, depth - 1, argc, argv); 
     makeTile(image.get_crop(image._width/2, 0, image._width, image._height/2), zoom + 1, smallX + 1, smallY, depth - 1, argc, argv); 
     makeTile(image.get_crop(0, image._height/2, image._width/2, image._height), zoom + 1, smallX, smallY + 1, depth - 1, argc, argv); 
     makeTile(image.get_crop(image._width/2, image._height/2, image._width, image._height), zoom + 1, smallX + 1, smallY + 1, depth - 1, argc, argv); 
    } 
} 

L'image envoyée à cette méthode sur la La première boucle est la carte générée à partir de libnoise et chargée en utilisant CImg.

Répondre

1

~/tiles/0/0/0.bmp n'est définitivement pas un nom de fichier valide. Je suppose que vous pensiez que ~ serait remplacé par la valeur de votre $HOME, mais ce n'est pas le cas (ce remplacement est effectué uniquement lors de l'écriture d'une commande shell, par exemple avec bash).