diff --git a/coding/lodepng.cpp b/coding/lodepng.cpp index 35ff10d5c8..dd07351236 100644 --- a/coding/lodepng.cpp +++ b/coding/lodepng.cpp @@ -30,9 +30,6 @@ You are free to name this file lodepng.cpp or lodepng.c depending on your usage. #include "lodepng.hpp" -#include "file_reader.hpp" -#include "file_writer.hpp" - #define VERSION_STRING "20100314" /* ////////////////////////////////////////////////////////////////////////// */ @@ -4257,9 +4254,8 @@ namespace LodePNG //#ifdef LODEPNG_COMPILE_DISK - void loadFile(std::vector& buffer, const std::string& filename) //designed for loading files from hard disk in an std::vector + void loadFile(std::vector& buffer, ReaderPtr & reader) //designed for loading files from hard disk in an std::vector { - FileReader reader(filename); uint64_t const sz = reader.Size(); if (sz > 0) { @@ -4269,15 +4265,15 @@ namespace LodePNG } /*write given buffer to the file, overwriting the file, it doesn't append to it.*/ - void saveFile(const std::vector& buffer, const std::string& filename) - { - size_t const sz = buffer.size(); - if (sz > 0) - { - FileWriter writer(filename); - writer.Write(&buffer[0], sz); - } - } +// void saveFile(const std::vector& buffer, const std::string& filename) +// { +// size_t const sz = buffer.size(); +// if (sz > 0) +// { +// FileWriter writer(filename); +// writer.Write(&buffer[0], sz); +// } +// } //#endif /*LODEPNG_COMPILE_DISK*/ diff --git a/coding/lodepng.hpp b/coding/lodepng.hpp index 9cf77c737d..d6c906e912 100644 --- a/coding/lodepng.hpp +++ b/coding/lodepng.hpp @@ -30,6 +30,8 @@ freely, subject to the following restrictions: #include #include +#include "reader.hpp" + /* ////////////////////////////////////////////////////////////////////////// */ /* Code Sections */ /* ////////////////////////////////////////////////////////////////////////// */ @@ -488,8 +490,8 @@ namespace LodePNG //#ifdef LODEPNG_COMPILE_DISK //free functions allowing to load and save a file from/to harddisk - void loadFile(std::vector& buffer, const std::string& filename); - void saveFile(const std::vector& buffer, const std::string& filename); + void loadFile(std::vector& buffer, ReaderPtr & reader); +// void saveFile(const std::vector& buffer, const std::string& filename); //#endif //LODEPNG_COMPILE_DISK } //namespace LodePNG diff --git a/coding/lodepng_io.hpp b/coding/lodepng_io.hpp index 74a982849a..8c0e398783 100644 --- a/coding/lodepng_io.hpp +++ b/coding/lodepng_io.hpp @@ -41,17 +41,17 @@ namespace boost { namespace gil { /// \ingroup LODEPNG_IO /// \brief Returns the width and height of the PNG file at the specified location. /// Throws std::ios_base::failure if the location does not correspond to a valid PNG file -inline point2 lodepng_read_dimensions(const char *filename) { - detail::lodepng_reader m(filename); +inline point2 lodepng_read_dimensions(ReaderPtr & reader) { + detail::lodepng_reader m(reader); return m.get_dimensions(); } /// \ingroup LODEPNG_IO /// \brief Returns the width and height of the PNG file at the specified location. /// Throws std::ios_base::failure if the location does not correspond to a valid PNG file -inline point2 lodepng_read_dimensions(const std::string& filename) { - return lodepng_read_dimensions(filename.c_str()); -} +//inline point2 lodepng_read_dimensions(ReaderPtr & reader) { +// return lodepng_read_dimensions(reader); +//} /// \ingroup LODEPNG_IO /// \brief Determines whether the given view type is supported for reading @@ -143,8 +143,8 @@ inline void lodepng_read_and_convert_view(const std::string& filename,const View /// \brief Allocates a new image whose dimensions are determined by the given png image file, loads and color-converts the pixels into it. /// Throws std::ios_base::failure if the file is not a valid PNG file template -inline void lodepng_read_and_convert_image(const char* filename,Image& im,CC cc) { - detail::lodepng_reader_color_convert m(filename,cc); +inline void lodepng_read_and_convert_image(ReaderPtr & reader,Image& im,CC cc) { + detail::lodepng_reader_color_convert m(reader,cc); m.read_image(im); } diff --git a/coding/lodepng_io_private.hpp b/coding/lodepng_io_private.hpp index 54271aab35..88e9ab741f 100644 --- a/coding/lodepng_io_private.hpp +++ b/coding/lodepng_io_private.hpp @@ -145,11 +145,11 @@ struct lodepng_write_support_private { BOOST_STATIC_CONSTANT(int,color_type=LODEPNG_COLOR_TYPE_RGBA); }; -class lodepng_reader : public file_mgr { +class lodepng_reader { protected: LodePNG::Decoder m_decoder; - std::string m_fileName; + ReaderPtr & m_reader; int sig_cmp(unsigned char * sig, size_t start, size_t num_to_check) { @@ -174,15 +174,16 @@ protected: void init() { - unsigned char buf[30]; - io_error_if(fread(buf, 1, 30, get()) != 30, - "lodepng_check_validity: fail to read file"); - m_decoder.inspect(buf, 30); + unsigned char buf[30]; + m_reader.Read(0, buf, 30); +// io_error_if(fread(buf, 1, 30, get()) != 30, +// "lodepng_check_validity: fail to read file"); + m_decoder.inspect(buf, 30); } public: - lodepng_reader(const char* filename) : file_mgr(filename, "rb"), m_fileName(filename) { init(); } + lodepng_reader(ReaderPtr & reader) : m_reader(reader) { init(); } point2 get_dimensions() { return point2(m_decoder.getWidth(), m_decoder.getHeight()); @@ -205,7 +206,7 @@ public: io_error("lodepng_read_view: input view type is incompatible with the image type(colorType mismatch)"); std::vector inputData; - LodePNG::loadFile(inputData, m_fileName); + LodePNG::loadFile(inputData, m_reader); std::vector decodedData; m_decoder.decode(decodedData, inputData); @@ -239,8 +240,8 @@ class lodepng_reader_color_convert : public lodepng_reader { private: CC _cc; public: - lodepng_reader_color_convert(const char* filename,CC cc_in) : lodepng_reader(filename),_cc(cc_in) {} - lodepng_reader_color_convert(const char* filename) : lodepng_reader(filename) {} + lodepng_reader_color_convert(ReaderPtr & reader, CC cc_in) : lodepng_reader(reader),_cc(cc_in) {} + lodepng_reader_color_convert(ReaderPtr & reader) : lodepng_reader(reader) {} template void apply(const View& view) { @@ -249,7 +250,7 @@ public: "lodepng_read_view: input view size does not match PNG file size"); std::vector inputData; - LodePNG::loadFile(inputData, m_fileName); + LodePNG::loadFile(inputData, m_reader); std::vector decodedData; m_decoder.decode(decodedData, inputData); @@ -417,7 +418,7 @@ public: view.height() ); - LodePNG::saveFile(buffer, m_fileName); +// LodePNG::saveFile(buffer, m_fileName); } }; diff --git a/yg/texture.hpp b/yg/texture.hpp index 1b2ab502ea..0beb336f0d 100644 --- a/yg/texture.hpp +++ b/yg/texture.hpp @@ -20,7 +20,8 @@ namespace yg inline m2::PointU const GetDimensions(string const & fileName) { - gil::point2 size = gil::lodepng_read_dimensions(GetPlatform().ReadPathForFile(fileName)); + ReaderPtr reader = GetPlatform().GetReader(fileName); + gil::point2 size = gil::lodepng_read_dimensions(reader); return m2::PointU(size.x, size.y); } @@ -50,7 +51,8 @@ namespace yg Texture(string const & fileName) : BaseTexture(GetDimensions(fileName)) { typename Traits::image_t image(width(), height()); - gil::lodepng_read_and_convert_image(GetPlatform().ReadPathForFile(fileName), image, typename Traits::color_converter()); + ReaderPtr reader = GetPlatform().GetReader(fileName); + gil::lodepng_read_and_convert_image(reader, image, typename Traits::color_converter()); upload(&gil::view(image)(0, 0)); }