1 /* 2 * Copyright (C) 2006-2020 by the Widelands Development Team 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 2 7 * of the License, or (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 * 18 */ 19 20 #ifndef WL_GRAPHIC_IMAGE_IO_H 21 #define WL_GRAPHIC_IMAGE_IO_H 22 23 #include <memory> 24 25 #include "base/wexception.h" 26 27 class FileSystem; 28 class Texture; 29 class StreamWrite; 30 struct SDL_Surface; 31 32 class ImageNotFound : public WException { 33 public: ImageNotFound(const std::string & fn)34 explicit ImageNotFound(const std::string& fn) : wexception("Image not found: %s", fn.c_str()) { 35 } 36 }; 37 38 class ImageLoadingError : public WException { 39 public: ImageLoadingError(const std::string & fn,const std::string & reason)40 ImageLoadingError(const std::string& fn, const std::string& reason) 41 : wexception("Error loading %s: %s", fn.c_str(), reason.c_str()) { 42 } 43 }; 44 45 /// Loads the image 'fn' from 'fs'. 46 std::unique_ptr<Texture> load_image(const std::string& fn, FileSystem* fs = nullptr); 47 48 /// Loads the image 'fn' from 'fs' into an SDL_Surface. Caller must SDL_FreeSurface() the returned 49 /// value. 50 SDL_Surface* load_image_as_sdl_surface(const std::string& fn, FileSystem* fs = nullptr); 51 52 /// Saves the 'texture' to 'sw' as a PNG. 53 enum class ColorType { RGB, RGBA }; 54 bool save_to_png(Texture* texture, StreamWrite* sw, ColorType color_type); 55 56 #endif // end of include guard: WL_GRAPHIC_IMAGE_IO_H 57