diff options
-rw-r--r-- | include/mbgl/util/image.hpp | 7 | ||||
-rw-r--r-- | platform/default/png_writer.cpp | 8 |
2 files changed, 9 insertions, 6 deletions
diff --git a/include/mbgl/util/image.hpp b/include/mbgl/util/image.hpp index 1d84d4824a..2de7646837 100644 --- a/include/mbgl/util/image.hpp +++ b/include/mbgl/util/image.hpp @@ -48,6 +48,13 @@ public: return size && data.get() != nullptr; } + template <typename T = Image> + T clone() const { + T copy(size); + std::copy(data.get(), data.get() + bytes(), copy.data.get()); + return copy; + } + size_t stride() const { return channels * size.width; } size_t bytes() const { return stride() * size.height; } diff --git a/platform/default/png_writer.cpp b/platform/default/png_writer.cpp index a620d8b986..13d60c34fe 100644 --- a/platform/default/png_writer.cpp +++ b/platform/default/png_writer.cpp @@ -39,12 +39,8 @@ namespace mbgl { // Encode PNGs without libpng. std::string encodePNG(const PremultipliedImage& pre) { - const UnassociatedImage src = [&pre] { - // Make copy of the image so that we can unpremultiply it. - PremultipliedImage copy(pre.size); - std::copy(pre.data.get(), pre.data.get() + pre.bytes(), copy.data.get()); - return util::unpremultiply(std::move(copy)); - }(); + // Make copy of the image so that we can unpremultiply it. + const auto src = util::unpremultiply(pre.clone()); // PNG magic bytes const char preamble[8] = { char(0x89), 'P', 'N', 'G', '\r', '\n', 0x1a, '\n' }; |