#pragma once #ifndef PIXEL_SELECTORS_H #define PIXEL_SELECTORS_H #include "tpixel.h" #include "tpixelgr.h" #include "tpixelcm.h" namespace TRop { namespace borders { //**************************************************************** // Standard Pixel Selectors //**************************************************************** template class PixelSelector { bool m_skip; public: typedef Pix pixel_type; typedef Pix value_type; public: PixelSelector(bool onlyCorners = true) : m_skip(onlyCorners) {} value_type transparent() const { return pixel_type::Transparent; } bool transparent(const pixel_type &pix) const { return (pix.m == 0); } value_type value(const pixel_type &pix) const { return pix; } bool equal(const pixel_type &a, const pixel_type &b) const { return a == b; } void setSkip(bool skip) { m_skip = skip; } bool skip(const value_type &prevLeftValue, const value_type &leftValue) const { return m_skip; } }; //-------------------------------------------------------------------------------- template <> class PixelSelector { bool m_skip; TPixelGR8 m_transpColor; public: typedef TPixelGR8 pixel_type; typedef TPixelGR8 value_type; public: PixelSelector(bool onlyCorners = true, pixel_type transparentColor = pixel_type::White) : m_skip(onlyCorners), m_transpColor(transparentColor) {} value_type transparent() const { return m_transpColor; } bool transparent(const pixel_type &pix) const { return (pix == m_transpColor); } value_type value(const pixel_type &pix) const { return pix; } bool equal(const pixel_type &a, const pixel_type &b) const { return a == b; } void setSkip(bool skip) { m_skip = skip; } bool skip(const value_type &prevLeftValue, const value_type &leftValue) const { return m_skip; } }; //-------------------------------------------------------------------------------- template <> class PixelSelector { bool m_skip; TPixelGR16 m_transpColor; public: typedef TPixelGR16 pixel_type; typedef TPixelGR16 value_type; public: PixelSelector(bool onlyCorners = true, pixel_type transparentColor = pixel_type::White) : m_skip(onlyCorners), m_transpColor(transparentColor) {} value_type transparent() const { return m_transpColor; } bool transparent(const pixel_type &pix) const { return (pix == m_transpColor); } value_type value(const pixel_type &pix) const { return pix; } bool equal(const pixel_type &a, const pixel_type &b) const { return a == b; } void setSkip(bool skip) { m_skip = skip; } bool skip(const value_type &prevLeftValue, const value_type &leftValue) const { return m_skip; } }; //-------------------------------------------------------------------------------- template <> class PixelSelector { int m_tone; bool m_skip; public: typedef TPixelCM32 pixel_type; typedef TUINT32 value_type; public: PixelSelector(bool onlyCorners = true, int tone = 128) : m_tone(tone), m_skip(onlyCorners) {} value_type transparent() const { return 0; } bool transparent(const pixel_type &pix) const { return value(pix) == 0; } value_type value(const pixel_type &pix) const { return (pix.getTone() < m_tone) ? pix.getInk() : pix.getPaint(); } bool equal(const pixel_type &a, const pixel_type &b) const { return value(a) == value(b); } void setSkip(bool skip) { m_skip = skip; } bool skip(const value_type &prevLeftValue, const value_type &leftValue) const { return m_skip; } }; } } // namespace TRop::borders #endif // PIXEL_SELECTORS_H