Ich versuche, Kacheln aus einem Weltgenerator zu erstellen, den ich mit libnoise angepasst habe. Mit Hilfe der libnoise Sparmethoden gut funktionieren, aber bei dem Versuch, und Bilder Ernte zu skalieren CImg verwenden, bekomme ich folgende Fehlermeldung:Fehler beim Speichern des Bildes mit CImg
[CImg] *** CImgIOException *** cimg::fopen(): Failed to open file '~/tiles/0/0/0.bmp' with mode 'wb'.
Relevante Methode:
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);
}
}
Das Bild dieser Methode auf die gesendeten Die erste Schleife ist die generierte Karte von libnoise und wird mit CImg geladen.