Toshihiro Shimizu 890ddd
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "trastercm.h"
Toshihiro Shimizu 890ddd
#include "texception.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TROP_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//  Forward declarations
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TPalette;
Toshihiro Shimizu 890ddd
typedef TSmartPointerT<tpalette> TPaletteP;</tpalette>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
extern "C" {
Toshihiro Shimizu 890ddd
struct _RASTER;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//********************************************************************************
Toshihiro Shimizu 890ddd
//    TRopException  definition
Toshihiro Shimizu 890ddd
//********************************************************************************
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class DVAPI TRopException final : public TException {
Shinya Kitaoka 120a6e
  std::string message;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TRopException(const std::string &s) : message(s) {}
Shinya Kitaoka 120a6e
  ~TRopException() {}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  TString getMessage() const override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//********************************************************************************
Toshihiro Shimizu 890ddd
//    TRop  namespace
Toshihiro Shimizu 890ddd
//********************************************************************************
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//! The TRop namespace provides various algorithms to operate with Toonz's
Shinya Kitaoka 120a6e
//! raster types
Shinya Kitaoka 120a6e
namespace TRop {
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
enum ResampleFilterType {
Shinya Kitaoka 120a6e
  None,
Shinya Kitaoka 120a6e
  //! triangle filter
Shinya Kitaoka 120a6e
  Triangle,
Shinya Kitaoka 120a6e
  //! Mitchell-Netravali filter
Shinya Kitaoka 120a6e
  Mitchell,
Shinya Kitaoka 120a6e
  //! cubic convolution, a = .5
Shinya Kitaoka 120a6e
  Cubic5,
Shinya Kitaoka 120a6e
  //! cubic convolution, a = .75
Shinya Kitaoka 120a6e
  Cubic75,
Shinya Kitaoka 120a6e
  //! cubic convolution, a = 1
Shinya Kitaoka 120a6e
  Cubic1,
Shinya Kitaoka 120a6e
  //! Hann window, rad = 2
Shinya Kitaoka 120a6e
  Hann2,
Shinya Kitaoka 120a6e
  //! Hann window, rad = 3
Shinya Kitaoka 120a6e
  Hann3,
Shinya Kitaoka 120a6e
  //! Hamming window, rad = 2
Shinya Kitaoka 120a6e
  Hamming2,
Shinya Kitaoka 120a6e
  //! Hamming window, rad = 3
Shinya Kitaoka 120a6e
  Hamming3,
Shinya Kitaoka 120a6e
  //! Lanczos window, rad = 2
Shinya Kitaoka 120a6e
  Lanczos2,
Shinya Kitaoka 120a6e
  //! Lanczos window, rad = 3
Shinya Kitaoka 120a6e
  Lanczos3,
Shinya Kitaoka 120a6e
  //! Gaussian convolution
Shinya Kitaoka 120a6e
  Gauss,
Shinya Kitaoka 120a6e
  //! 'Quick' filter
Shinya Kitaoka 120a6e
  ClosestPixel,
Shinya Kitaoka 120a6e
  //! 'Quick' filter
Shinya Kitaoka 120a6e
  Bilinear,
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  HowMany
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
enum ColorMask { RChan = 0x1, GChan = 0x2, BChan = 0x4, MChan = 0x8 };
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
enum ErodilateMaskType { ED_rectangular, ED_circular };
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Applies first order mappings to each of \b rin's channels.
Toshihiro Shimizu 890ddd
/*! \note The input and output rasters must have the same size and pixel type.
Toshihiro Shimizu 890ddd
            Supports rout == rin. */
Shinya Kitaoka 120a6e
DVAPI void rgbmScale(TRasterP rout, TRasterP rin, const double *k,
Shinya Kitaoka 120a6e
                     const double *a, const int *out0, const int *out1);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void rgbmScale(TRasterP rout, TRasterP rin, double kr, double kg,
Shinya Kitaoka 120a6e
                     double kb, double km, double ar = 0.0, double ag = 0.0,
Shinya Kitaoka 120a6e
                     double ab = 0.0, double am = 0.0);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
/*! Transforms each input channel interval into the corresponding channel
Shinya Kitaoka 120a6e
   interval,
Toshihiro Shimizu 890ddd
      cropping values if necessary.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
      Specified pointers are associated to int[5] arrays representing the 5-ple
Toshihiro Shimizu 890ddd
      (RGB, R, G, B, M) - where RGBM adjustment apply first. Then, Global apply
Toshihiro Shimizu 890ddd
      equally on RGB channels (but not on M).*/
Toshihiro Shimizu 890ddd
/*! \note The input and output rasters must have the same size and pixel type.
Toshihiro Shimizu 890ddd
            Supports rout == rin. */
Shinya Kitaoka 120a6e
DVAPI void rgbmAdjust(TRasterP rout, TRasterP rin, const int *in0,
Shinya Kitaoka 120a6e
                      const int *in1, const int *out0, const int *out1);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Make a checkoboard in \b rout
Shinya Kitaoka 120a6e
/*! Two variables \b TPixel32 describe the checkboard color,
Toshihiro Shimizu 890ddd
      \b TDimension are checkboard dimension and \b TPoinD the position
Toshihiro Shimizu 890ddd
  \include checkBoard_ex.cpp*/
Shinya Kitaoka 120a6e
DVAPI void checkBoard(TRasterP rout, const TPixel32 &, const TPixel32 &,
Shinya Kitaoka 120a6e
                      const TDimensionD &, const TPointD &);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//! Make the image over of the \b up raster on the \b dn raster and put the
Shinya Kitaoka 120a6e
//! resulting raster in \b rout
Toshihiro Shimizu 890ddd
/*! \include over_ex1.cpp*/
Toshihiro Shimizu 890ddd
DVAPI void over(const TRasterP &out, const TRasterP &dn, const TRasterP &up);
Shinya Kitaoka 120a6e
//! Make the image over of the \b up raster on the \b out raster starting from
Shinya Kitaoka 120a6e
//! \b pos
Shinya Kitaoka 120a6e
DVAPI void over(const TRasterP &out, const TRasterP &up,
Shinya Kitaoka 120a6e
                const TPoint &pos = TPoint());
Toshihiro Shimizu 890ddd
//! Make the image over of the \b up raster on the \b out raster
Toshihiro Shimizu 890ddd
DVAPI void over(const TRasterP &out, const TRasterP &up, const TAffine &aff,
Shinya Kitaoka 120a6e
                ResampleFilterType filterType = Triangle);
Shinya Kitaoka 120a6e
//! Make the image over of the \b up raster on the \b out raster starting from
Shinya Kitaoka 120a6e
//! \b pos.
Toshihiro Shimizu 890ddd
//! Position \b pos must be already transformed using \b aff.
Shinya Kitaoka 120a6e
DVAPI void over(const TRasterP &out, const TRasterP &up, const TPoint &pos,
Shinya Kitaoka 120a6e
                const TAffine &aff, ResampleFilterType filterType = Triangle);
Shinya Kitaoka 120a6e
//! Make the image over of the \b up raster on the \b dn raster using a \b mask
Shinya Kitaoka 120a6e
//! and put the resulting raster in \b rout
Shinya Kitaoka 120a6e
DVAPI void over(const TRasterP &out, const TRasterP &dn, const TRasterP &up,
Shinya Kitaoka 120a6e
                const TRasterGR8P &mask);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//! Make a coloring of \b rup with \b color and put the resulting raster in \b
Shinya Kitaoka 120a6e
//! rout
Toshihiro Shimizu 890ddd
DVAPI void over(TRaster32P rout, const TRasterGR8P &rup, const TPixel32 &color);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
DVAPI void over(TRasterP rout, const TRasterCM32P &rup, TPalette *palette,
Shinya Kitaoka 120a6e
                const TPoint &point = TPoint(), const TAffine &aff = TAffine());
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//! Apply the transformation \b aff to the raster \b in and put the resulting
Shinya Kitaoka 120a6e
//! raster in \b rout
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
      It can be specified a resample filter type and a blur factor.
Toshihiro Shimizu 890ddd
    \include resample_ex.cpp
Toshihiro Shimizu 890ddd
  */
Toshihiro Shimizu 890ddd
DVAPI void resample(const TRasterP &out, const TRasterP &in, const TAffine &aff,
Shinya Kitaoka 120a6e
                    ResampleFilterType filterType = Triangle, double blur = 1.);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Like the over function, but only uses closest_pixel filter
Shinya Kitaoka 120a6e
DVAPI void quickPut(const TRasterP &out, const TRasterP &up, const TAffine &aff,
Shinya Kitaoka 120a6e
                    const TPixel32 &colorScale = TPixel::Black,
Shinya Kitaoka 120a6e
                    bool doPremultiply = false, bool whiteTransp = false,
Shinya Kitaoka 120a6e
                    bool firstColumn               = false,
Shinya Kitaoka 120a6e
                    bool doRasterDarkenBlendedView = false);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Like the over function but up image must be cmapped.
Shinya Kitaoka 120a6e
/*! Only uses closest_pixel filter.
Toshihiro Shimizu 890ddd
    GlobalMatte is the opacity, used for onionskinning
Toshihiro Shimizu 890ddd
  */
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void quickPut(const TRasterP &out, const TRasterCM32P &up,
Shinya Kitaoka 120a6e
                    const TPaletteP &plt, const TAffine &aff,
Shinya Kitaoka 120a6e
                    const TPixel32 &globalColorScale = TPixel::Black,
Shinya Kitaoka 120a6e
                    bool inksOnly                    = false);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// for trasparency check, ink check and paint check
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class CmappedQuickputSettings {
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TPixel32 m_globalColorScale, m_transpCheckPaint, m_transpCheckBg,
Shinya Kitaoka 120a6e
      m_transpCheckInk;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int m_inkIndex, m_paintIndex;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool m_inksOnly, m_transparencyCheck, m_blackBgCheck;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  CmappedQuickputSettings()
Shinya Kitaoka 120a6e
      : m_globalColorScale(TPixel32::Black)
Shinya Kitaoka 120a6e
      , m_inksOnly(false)
Shinya Kitaoka 120a6e
      , m_transparencyCheck(false)
Shinya Kitaoka 120a6e
      , m_blackBgCheck(false)
Shinya Kitaoka 120a6e
      , m_inkIndex(-1)
Shinya Kitaoka 120a6e
      , m_paintIndex(-1) {}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void quickPut(const TRasterP &dn, const TRasterCM32P &upCM32,
Shinya Kitaoka 120a6e
                    const TPaletteP &plt, const TAffine &aff,
Shinya Kitaoka 120a6e
                    const CmappedQuickputSettings &settings);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void quickResampleColorFilter(const TRasterP &dn, const TRasterP &up,
Shinya Kitaoka 120a6e
                                    const TAffine &aff, const TPaletteP &plt,
Shinya Kitaoka 120a6e
                                    UCHAR colorMask);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void convolve_3_i(TRasterP rout, TRasterP rin, int dx, int dy,
Shinya Kitaoka 120a6e
                        double conv[]);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void convolve_i(TRasterP rout, TRasterP rin, int dx, int dy,
Shinya Kitaoka 120a6e
                      double conv[], int radius);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
DVAPI void fracmove(TRasterP rout, TRasterP rin, double dx, double dy);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Convert \b src raster in raster type \b dst
Toshihiro Shimizu 890ddd
DVAPI void convert(TRasterP dst, const TRasterP &src);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Copy \b src in \b dst
Toshihiro Shimizu 890ddd
DVAPI void copy(TRasterP dst, const TRasterP &src);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void brush(TRaster32P ras, const TPoint &a, const TPoint &b, int radius,
Shinya Kitaoka 120a6e
                 const TPixel32 &color);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Get \b bbox of \b ras raster
Toshihiro Shimizu 890ddd
DVAPI void computeBBox(TRasterP ras, TRect &bbox);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Add background of color \b col to the \b ras raster
Toshihiro Shimizu 890ddd
DVAPI void addBackground(TRasterP ras, const TPixel32 &col);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Return true if \b ras is opaque
Toshihiro Shimizu 890ddd
DVAPI bool isOpaque(TRasterP ras);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//! Invert \b ras color in according with \b invRed, \b invGreen, \b invBlue, \b
Shinya Kitaoka 120a6e
//! invMatte
Shinya Kitaoka 120a6e
DVAPI void invert(TRasterP ras, bool invRed = true, bool invGreen = true,
Shinya Kitaoka 120a6e
                  bool invBlue = true, bool invMatte = false);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//! Add \b rdown pixels to \b rup pixels in according with the factor \b v and
Shinya Kitaoka 120a6e
//! put the resulting raster in \b rout
Shinya Kitaoka 120a6e
DVAPI void add(const TRasterP &rup, const TRasterP &rdown, const TRasterP &rout,
Shinya Kitaoka 120a6e
               double v);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Add \b rdown pixels to \b rup pixels and put the resulting raster in \b rout
Shinya Kitaoka 120a6e
DVAPI void add(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
               const TRasterP &rout);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void colordodge(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                      const TRasterP &rout);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void colorburn(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                     const TRasterP &rout);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void screen(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                  const TRasterP &rout);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//! Subtract \b rdown pixels to \b rup pixels and put the resulting raster in \b
Shinya Kitaoka 120a6e
//! rout
Shinya Kitaoka 120a6e
DVAPI void sub(const TRasterP &rup, const TRasterP &rdown, const TRasterP &rout,
Shinya Kitaoka 120a6e
               bool matte);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void mult(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                const TRasterP &rout, int v, bool matte);  //[-255..+255]
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void ropin(const TRasterP &source, const TRasterP &matte,
Shinya Kitaoka 120a6e
                 const TRasterP &rout);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void ropout(const TRasterP &source, const TRasterP &matte,
Shinya Kitaoka 120a6e
                  const TRasterP &rout);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void atop(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                const TRasterP &rout);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void txor(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                const TRasterP &rout);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void crossDissolve(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                         const TRasterP &rout, UCHAR v);  //[0..255]
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void lighten(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                   const TRasterP &rout);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void darken(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                  const TRasterP &rout);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void ropmin(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                  const TRasterP &rout, bool matte);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void ropmax(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                  const TRasterP &rout);
Shinya Kitaoka 120a6e
DVAPI void linearburn(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                      const TRasterP &rout);
Shinya Kitaoka 120a6e
DVAPI void overlay(const TRasterP &rup, const TRasterP &rdown,
Shinya Kitaoka 120a6e
                   const TRasterP &rout);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Make a premultiply of all raster pixels
Toshihiro Shimizu 890ddd
DVAPI void premultiply(const TRasterP &ras);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Make a depremultiply of all raster pixels
Toshihiro Shimizu 890ddd
DVAPI void depremultiply(const TRasterP &ras);
Toshihiro Shimizu 890ddd
shun_iwasawa 927bc0
// called from meshtexturizer in order to remove unwanted black contour
shun_iwasawa 927bc0
// appears at the border of the plastic-deformed texture.
shun_iwasawa 927bc0
// this function will "expand" color channels of the border pixels to
shun_iwasawa 927bc0
// neighbor full-transparent pixels.
shun_iwasawa 927bc0
// by doing this the linear interpolation at the border pixels will not
shun_iwasawa 927bc0
// decay color info and can get ideal antialiased result
shun_iwasawa 927bc0
DVAPI void expandColor(const TRaster32P &ras32, bool precise);
shun_iwasawa 927bc0
Toshihiro Shimizu 890ddd
//! all white pixels are set to transparent
Toshihiro Shimizu 890ddd
DVAPI void whiteTransp(const TRasterP &ras);
Toshihiro Shimizu 890ddd
shun_iwasawa 2c0f50
//! apply color filter and semi-transparency of column to the render result
shun_iwasawa 2c0f50
//  implemented in toperators.cpp
shun_iwasawa 2c0f50
DVAPI void applyColorScale(const TRasterP &ras, const TPixel32 &colorScale);
shun_iwasawa 2c0f50
Toshihiro Shimizu 890ddd
DVAPI TRasterP shrink(TRasterP rin, int shrink);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Make a \b gamma correct in the \b raster
Toshihiro Shimizu 890ddd
DVAPI void gammaCorrect(TRasterP raster, double gamma);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Make a \b gamma correct in the \b raster
Shinya Kitaoka 120a6e
DVAPI void gammaCorrectRGBM(TRasterP raster, double gammar, double gammag,
Shinya Kitaoka 120a6e
                            double gammab, double gammam);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Return the pixel size of the \b blur border
Toshihiro Shimizu 890ddd
DVAPI int getBlurBorder(double blur);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//! Inserts antialias around jaggy lines. Threshold is a pixel distance intended
Shinya Kitaoka 120a6e
//! from 0 to 256.
Toshihiro Shimizu 890ddd
//! Softness may vary from 0 to 100.
Shinya Kitaoka 120a6e
DVAPI void antialias(const TRasterP &src, const TRasterP &dst, int threshold,
Shinya Kitaoka 120a6e
                     int softness);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//! Performs despeckling by replacing the color of small uniform areas (those
Shinya Kitaoka 120a6e
//! enclosable in a
Shinya Kitaoka 120a6e
//! square of specified edge length) with that most occurring along the area
Shinya Kitaoka 120a6e
//! border.
Toshihiro Shimizu 890ddd
DVAPI void majorityDespeckle(const TRasterP &ras, int sizeThreshold);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//! Make blur effect on \b srcRas raster and put the result in \b dstRas.
Shinya Kitaoka 120a6e
DVAPI void blur(const TRasterP &dstRas, const TRasterP &srcRas, double blur,
Shinya Kitaoka 120a6e
                int dx, int dy, bool useSSE = false);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
struct RaylitParams {
Shinya Kitaoka 120a6e
  TPixel m_color;
Shinya Kitaoka 120a6e
  T3DPoint m_lightOriginSrc;
Shinya Kitaoka 120a6e
  T3DPoint m_lightOriginDst;
Shinya Kitaoka 120a6e
  double m_smoothness;
Shinya Kitaoka 120a6e
  double m_decay;
Shinya Kitaoka 120a6e
  double m_intensity;
Shinya Kitaoka 120a6e
  double m_scale;
Shinya Kitaoka 120a6e
  bool m_invert;
Shinya Kitaoka 120a6e
  bool m_includeInput;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Make raylit effect on \b srcRas raster and put the result in \b dstRas.
Shinya Kitaoka 120a6e
DVAPI void raylit(const TRasterP &dstRas, const TRasterP &srcRas,
Shinya Kitaoka 120a6e
                  const RaylitParams ¶ms);
Shinya Kitaoka 120a6e
DVAPI void glassRaylit(const TRasterP &dstRas, const TRasterP &srcRas,
Shinya Kitaoka 120a6e
                       const RaylitParams ¶ms);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void despeckle(const TRasterP &ras, int sizeThreshold, bool check,
Shinya Kitaoka 120a6e
                     bool trasparentIsWhite = false);
Shinya Kitaoka 120a6e
DVAPI void despeckle(const TRasterP &rout, const TRasterP &rin,
Shinya Kitaoka 120a6e
                     int sizeThreshold, bool check);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Return a raster with r b channels swapped
Toshihiro Shimizu 890ddd
DVAPI TRaster32P copyAndSwapRBChannels(const TRaster32P &srcRaster);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
// result in 'left'
Toshihiro Shimizu 890ddd
DVAPI void makeStereoRaster(const TRasterP &left, const TRasterP &right);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DVAPI void setChannel(const TRasterP &rin, TRasterP rout, UCHAR chan,
Shinya Kitaoka 120a6e
                      bool greytones);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Shinya Kitaoka 120a6e
    Applies classical morphological erosion/dilation to the specified input
Shinya Kitaoka 120a6e
   raster.
Toshihiro Shimizu 890ddd
    \note Supports rin == rout.
Toshihiro Shimizu 890ddd
  */
Shinya Kitaoka 120a6e
DVAPI void erodilate(const TRasterP &rin, const TRasterP &rout, double radius,
Shinya Kitaoka 120a6e
                     ErodilateMaskType type);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef TNZ_MACHINE_CHANNEL_ORDER_MRGB
Toshihiro Shimizu 890ddd
DVAPI void swapRBChannels(const TRaster32P &r);
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
///////////////////////////////////////
Toshihiro Shimizu 890ddd
//  Utilities for Toonz 4.6 porting  //
Toshihiro Shimizu 890ddd
///////////////////////////////////////
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Convert TRasterP in an old toonz raster!
Toshihiro Shimizu 890ddd
/*! Use the same buffer, not creates a new raster (the palette is new instead!)
Toshihiro Shimizu 890ddd
  */
Shinya Kitaoka 120a6e
DVAPI _RASTER *convertRaster50to46(const TRasterP &inRas,
Shinya Kitaoka 120a6e
                                   const TPaletteP &inPalette);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Release the old toonz raster.
Toshihiro Shimizu 890ddd
/*! If the \b doReleaseBuffer is true, the buffer is released
Toshihiro Shimizu 890ddd
    (the palette is always deleted!)
Toshihiro Shimizu 890ddd
  */
Toshihiro Shimizu 890ddd
DVAPI void releaseRaster46(_RASTER *&r, bool doReleaseBuffer = false);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! Read an image in the path \b filename and put it in an old toonz raster
Toshihiro Shimizu 890ddd
DVAPI _RASTER *readRaster46(const char *filename);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//! Retrieves the input raster from Toonz internal cache. Need to call it before
Shinya Kitaoka 120a6e
//! using the raster.
Toshihiro Shimizu 890ddd
DVAPI void lockRaster(_RASTER *raster);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//! Surrenders the input raster's buffer to the cache. Should be called before
Shinya Kitaoka 120a6e
//! inactivity periods.
Toshihiro Shimizu 890ddd
DVAPI void unlockRaster(_RASTER *raster);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
}  // TRop namespace