// [[Rcpp::export]] Rcpp::IntegerVector tabulate_cpp(const Rcpp::IntegerVector & v, R_xlen_t nlevels) { // Using R_xlen_t to avoid checking for entries < 0 std::vector<R_xlen_t> table(nlevels); R_xlen_t n = v.size(); for (R_xlen_t i = 0; i < n; ++i) { table.at( v.at(i) - 1 ) ++; } // Wrapp may throw errors with R_xlen_t // return wrap(table); IntegerVector a(table.size()); std::copy(table.begin(), table.end(), a.begin()); return a; }
// [[Rcpp::export]] XPtrImage magick_image_readbin(Rcpp::RawVector x, Rcpp::CharacterVector density, Rcpp::IntegerVector depth, bool strip = false){ XPtrImage image = create(); #if MagickLibVersion >= 0x689 Magick::ReadOptions opts = Magick::ReadOptions(); #if MagickLibVersion >= 0x690 opts.quiet(1); #endif if(density.size()) opts.density(std::string(density.at(0)).c_str()); if(depth.size()) opts.depth(depth.at(0)); Magick::readImages(image.get(), Magick::Blob(x.begin(), x.length()), opts); #else Magick::readImages(image.get(), Magick::Blob(x.begin(), x.length())); #endif if(strip) for_each (image->begin(), image->end(), Magick::stripImage()); return image; }
// [[Rcpp::export]] XPtrImage magick_image_readpath(Rcpp::CharacterVector paths, Rcpp::CharacterVector density, Rcpp::IntegerVector depth, bool strip = false){ XPtrImage image = create(); #if MagickLibVersion >= 0x689 Magick::ReadOptions opts = Magick::ReadOptions(); #if MagickLibVersion >= 0x690 opts.quiet(1); #endif if(density.size()) opts.density(std::string(density.at(0)).c_str()); if(depth.size()) opts.depth(depth.at(0)); for(int i = 0; i < paths.size(); i++) Magick::readImages(image.get(), std::string(paths[i]), opts); #else for(int i = 0; i < paths.size(); i++) Magick::readImages(image.get(), std::string(paths[i])); #endif if(strip) for_each (image->begin(), image->end(), Magick::stripImage()); return image; }