diff --git a/include/mbgl/util/image.hpp b/include/mbgl/util/image.hpp index 1d84d4824..2de764683 100644 --- a/include/mbgl/util/image.hpp +++ b/include/mbgl/util/image.hpp @@ -48,6 +48,13 @@ public: return size && data.get() != nullptr; } + template + 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 a620d8b98..13d60c34f 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' };