diff --git a/Image.cpp b/Image.cpp index b5f0f02..0ae5dac 100644 --- a/Image.cpp +++ b/Image.cpp @@ -103,9 +103,22 @@ void Image::drawCircle(int x, int y, int diameter, const Color &c) void Image::save(const std::string &filename) { +#if (GD_MAJOR_VERSION == 2 && GD_MINOR_VERSION >= 1 && GD_RELEASE_VERSION >= 1) || GD_MAJOR_VERSION > 2 const char *f = filename.c_str(); if (gdSupportsFileType(f, 1) == GD_FALSE) throw std::runtime_error("Image format not supported by gd"); if (gdImageFile(m_image, f) == GD_FALSE) throw std::runtime_error("Error saving image"); +#else + if (filename.compare(filename.length() - 4, 4, ".png") != 0) + throw std::runtime_error("Only PNG is supported"); + FILE *f = fopen(filename.c_str(), "wb"); + if (!f) { + std::ostringstream oss; + oss << "Error opening image file: " << std::strerror(errno); + throw std::runtime_error(oss.str()); + } + gdImagePng(m_image, f); + fclose(f); +#endif }