0
我尝试使用libnoise改编的世界发生器生成地图图块。使用libnoise保存方法的工作很好,但尝试扩展和使用CIMG裁剪图像时,我得到以下错误:尝试使用CImg保存图像时发生错误
[CImg] *** CImgIOException *** cimg::fopen(): Failed to open file '~/tiles/0/0/0.bmp' with mode 'wb'.
相关方法:
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);
}
}
发送到该方法上的图像第一个循环是从libnoise生成的映射,并使用CImg加载。