#ifndef SLARASTER_CPP #define SLARASTER_CPP #include #include #include // minz image write: #include namespace Slic3r { namespace sla { const RasterBase::TMirroring RasterBase::NoMirror = {false, false}; const RasterBase::TMirroring RasterBase::MirrorX = {true, false}; const RasterBase::TMirroring RasterBase::MirrorY = {false, true}; const RasterBase::TMirroring RasterBase::MirrorXY = {true, true}; EncodedRaster PNGRasterEncoder::operator()(const void *ptr, size_t w, size_t h, size_t num_components) { std::vector buf; size_t s = 0; void *rawdata = tdefl_write_image_to_png_file_in_memory( ptr, int(w), int(h), int(num_components), &s); // On error, data() will return an empty vector. No other info can be // retrieved from miniz anyway... if (rawdata == nullptr) return EncodedRaster({}, "png"); auto pptr = static_cast(rawdata); buf.reserve(s); std::copy(pptr, pptr + s, std::back_inserter(buf)); MZ_FREE(rawdata); return EncodedRaster(std::move(buf), "png"); } std::ostream &operator<<(std::ostream &stream, const EncodedRaster &bytes) { stream.write(reinterpret_cast(bytes.data()), std::streamsize(bytes.size())); return stream; } EncodedRaster PPMRasterEncoder::operator()(const void *ptr, size_t w, size_t h, size_t num_components) { std::vector buf; auto header = std::string("P5 ") + std::to_string(w) + " " + std::to_string(h) + " " + "255 "; auto sz = w * h * num_components; size_t s = sz + header.size(); buf.reserve(s); auto buff = reinterpret_cast(ptr); std::copy(header.begin(), header.end(), std::back_inserter(buf)); std::copy(buff, buff+sz, std::back_inserter(buf)); return EncodedRaster(std::move(buf), "ppm"); } std::unique_ptr create_raster_grayscale_aa( const RasterBase::Resolution &res, const RasterBase::PixelDim & pxdim, double gamma, const RasterBase::Trafo & tr) { std::unique_ptr rst; if (gamma > 0) rst = std::make_unique(res, pxdim, tr, gamma); else rst = std::make_unique(res, pxdim, tr, agg::gamma_threshold(.5)); return rst; } } // namespace sla } // namespace Slic3r #endif // SLARASTER_CPP