2017-05-30 5 views
0

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.

Antwort

1

~/tiles/0/0/0.bmp ist definitiv kein gültiger Dateiname. Ich vermute, Sie dachten, ~ würde durch den Wert Ihrer $HOME ersetzt werden, aber das ist nicht der Fall (dieser Ersatz erfolgt nur beim Schreiben eines Shell-Befehls, z. B. mit bash).

Verwandte Themen