⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agg_pixfmt_rgb_packed.h

📁 这是VCF框架的代码
💻 H
📖 第 1 页 / 共 3 页
字号:
                              (p >> 4)  & 0xFFC0,                               (p << 6)  & 0xFFC0);        }    private:        const Gamma* m_gamma;    };    //=====================================================blender_bgrAAA    struct blender_bgrAAA    {        typedef rgba16 color_type;        typedef color_type::value_type value_type;        typedef color_type::calc_type calc_type;        typedef int32u pixel_type;        static AGG_INLINE void blend_pix(pixel_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned alpha,                                          unsigned)        {            pixel_type bgr = *p;            calc_type b = (bgr >> 14) & 0xFFC0;            calc_type g = (bgr >> 4)  & 0xFFC0;            calc_type r = (bgr << 6)  & 0xFFC0;            *p = (pixel_type)               (((((cb - b) * alpha + (b << 16)) >> 2)  & 0x3FF00000) |                ((((cg - g) * alpha + (g << 16)) >> 12) & 0x000FFC00) |                 (((cr - r) * alpha + (r << 16)) >> 22) | 0xC0000000);        }        static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)        {            return (pixel_type)(((b & 0xFFC0) << 14) |                                 ((g & 0xFFC0) << 4) |                                  (r >> 6) | 0xC0000000);        }        static AGG_INLINE color_type make_color(pixel_type p)        {            return color_type((p << 6)  & 0xFFC0,                               (p >> 4)  & 0xFFC0,                               (p >> 14) & 0xFFC0);        }    };    //=================================================blender_bgrAAA_pre    struct blender_bgrAAA_pre    {        typedef rgba16 color_type;        typedef color_type::value_type value_type;        typedef color_type::calc_type calc_type;        typedef int32u pixel_type;        static AGG_INLINE void blend_pix(pixel_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned alpha,                                          unsigned cover)        {            alpha = color_type::base_mask - alpha;            cover = (cover + 1) << (color_type::base_shift - 8);            pixel_type bgr = *p;            calc_type b = (bgr >> 14) & 0xFFC0;            calc_type g = (bgr >> 4)  & 0xFFC0;            calc_type r = (bgr << 6)  & 0xFFC0;            *p = (pixel_type)               ((((b * alpha + cb * cover) >> 2)  & 0x3FF00000) |                (((g * alpha + cg * cover) >> 12) & 0x000FFC00) |                 ((r * alpha + cr * cover) >> 22) | 0xC0000000);        }        static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)        {            return (pixel_type)(((b & 0xFFC0) << 14) |                                 ((g & 0xFFC0) << 4) |                                  (r >> 6) | 0xC0000000);        }        static AGG_INLINE color_type make_color(pixel_type p)        {            return color_type((p << 6)  & 0xFFC0,                               (p >> 4)  & 0xFFC0,                               (p >> 14) & 0xFFC0);        }    };    //=================================================blender_bgrAAA_gamma    template<class Gamma> class blender_bgrAAA_gamma    {    public:        typedef rgba16 color_type;        typedef color_type::value_type value_type;        typedef color_type::calc_type calc_type;        typedef int32u pixel_type;        typedef Gamma gamma_type;        blender_bgrAAA_gamma() : m_gamma(0) {}        void gamma(const gamma_type& g) { m_gamma = &g; }        AGG_INLINE void blend_pix(pixel_type* p,                                   unsigned cr, unsigned cg, unsigned cb,                                  unsigned alpha,                                   unsigned)        {            pixel_type bgr = *p;            calc_type b = m_gamma->dir((bgr >> 14) & 0xFFC0);            calc_type g = m_gamma->dir((bgr >> 4)  & 0xFFC0);            calc_type r = m_gamma->dir((bgr << 6)  & 0xFFC0);            *p = (pixel_type)               (((m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 16)) >> 16) << 14) & 0x3FF00000) |                ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 16)) >> 16) << 4 ) & 0x000FFC00) |                 (m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 16)) >> 16) >> 6 ) | 0xC0000000);        }        static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)        {            return (pixel_type)(((b & 0xFFC0) << 14) |                                 ((g & 0xFFC0) << 4) |                                  (r >> 6) | 0xC0000000);        }        static AGG_INLINE color_type make_color(pixel_type p)        {            return color_type((p << 6)  & 0xFFC0,                               (p >> 4)  & 0xFFC0,                               (p >> 14) & 0xFFC0);        }    private:        const Gamma* m_gamma;    };    //=====================================================blender_rgbBBA    struct blender_rgbBBA    {        typedef rgba16 color_type;        typedef color_type::value_type value_type;        typedef color_type::calc_type calc_type;        typedef int32u pixel_type;        static AGG_INLINE void blend_pix(pixel_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned alpha,                                          unsigned)        {            pixel_type rgb = *p;            calc_type r = (rgb >> 16) & 0xFFE0;            calc_type g = (rgb >> 5)  & 0xFFE0;            calc_type b = (rgb << 6)  & 0xFFC0;            *p = (pixel_type)               (((((cr - r) * alpha + (r << 16))      ) & 0xFFE00000) |                ((((cg - g) * alpha + (g << 16)) >> 11) & 0x001FFC00) |                 (((cb - b) * alpha + (b << 16)) >> 22));        }        static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)        {            return (pixel_type)(((r & 0xFFE0) << 16) | ((g & 0xFFE0) << 5) | (b >> 6));        }        static AGG_INLINE color_type make_color(pixel_type p)        {            return color_type((p >> 16) & 0xFFE0,                               (p >> 5)  & 0xFFE0,                               (p << 6)  & 0xFFC0);        }    };    //=================================================blender_rgbBBA_pre    struct blender_rgbBBA_pre    {        typedef rgba16 color_type;        typedef color_type::value_type value_type;        typedef color_type::calc_type calc_type;        typedef int32u pixel_type;        static AGG_INLINE void blend_pix(pixel_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned alpha,                                          unsigned cover)        {            alpha = color_type::base_mask - alpha;            cover = (cover + 1) << (color_type::base_shift - 8);            pixel_type rgb = *p;            calc_type r = (rgb >> 16) & 0xFFE0;            calc_type g = (rgb >> 5)  & 0xFFE0;            calc_type b = (rgb << 6)  & 0xFFC0;            *p = (pixel_type)               ((((r * alpha + cr * cover)      ) & 0xFFE00000) |                (((g * alpha + cg * cover) >> 11) & 0x001FFC00) |                 ((b * alpha + cb * cover) >> 22));        }        static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)        {            return (pixel_type)(((r & 0xFFE0) << 16) | ((g & 0xFFE0) << 5) | (b >> 6));        }        static AGG_INLINE color_type make_color(pixel_type p)        {            return color_type((p >> 16) & 0xFFE0,                               (p >> 5)  & 0xFFE0,                               (p << 6)  & 0xFFC0);        }    };    //=================================================blender_rgbBBA_gamma    template<class Gamma> class blender_rgbBBA_gamma    {    public:        typedef rgba16 color_type;        typedef color_type::value_type value_type;        typedef color_type::calc_type calc_type;        typedef int32u pixel_type;        typedef Gamma gamma_type;        blender_rgbBBA_gamma() : m_gamma(0) {}        void gamma(const gamma_type& g) { m_gamma = &g; }        AGG_INLINE void blend_pix(pixel_type* p,                                   unsigned cr, unsigned cg, unsigned cb,                                  unsigned alpha,                                   unsigned)        {            pixel_type rgb = *p;            calc_type r = m_gamma->dir((rgb >> 16) & 0xFFE0);            calc_type g = m_gamma->dir((rgb >> 5)  & 0xFFE0);            calc_type b = m_gamma->dir((rgb << 6)  & 0xFFC0);            *p = (pixel_type)               (((m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 16)) >> 16) << 16) & 0xFFE00000) |                ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 16)) >> 16) << 5 ) & 0x001FFC00) |                 (m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 16)) >> 16) >> 6 ));        }        static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)        {            return (pixel_type)(((r & 0xFFE0) << 16) | ((g & 0xFFE0) << 5) | (b >> 6));        }        static AGG_INLINE color_type make_color(pixel_type p)        {            return color_type((p >> 16) & 0xFFE0,                               (p >> 5)  & 0xFFE0,                               (p << 6)  & 0xFFC0);        }    private:        const Gamma* m_gamma;    };    //=====================================================blender_bgrABB    struct blender_bgrABB    {        typedef rgba16 color_type;        typedef color_type::value_type value_type;        typedef color_type::calc_type calc_type;        typedef int32u pixel_type;        static AGG_INLINE void blend_pix(pixel_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned alpha,                                          unsigned)        {            pixel_type bgr = *p;            calc_type b = (bgr >> 16) & 0xFFC0;            calc_type g = (bgr >> 6)  & 0xFFE0;            calc_type r = (bgr << 5)  & 0xFFE0;            *p = (pixel_type)               (((((cb - b) * alpha + (b << 16))      ) & 0xFFC00000) |                ((((cg - g) * alpha + (g << 16)) >> 10) & 0x003FF800) |                 (((cr - r) * alpha + (r << 16)) >> 21));        }        static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)        {            return (pixel_type)(((b & 0xFFC0) << 16) | ((g & 0xFFE0) << 6) | (r >> 5));        }        static AGG_INLINE color_type make_color(pixel_type p)        {            return color_type((p << 5)  & 0xFFE0,                              (p >> 6)  & 0xFFE0,                               (p >> 16) & 0xFFC0);        }    };    //=================================================blender_bgrABB_pre    struct blender_bgrABB_pre    {        typedef rgba16 color_type;        typedef color_type::value_type value_type;        typedef color_type::calc_type calc_type;        typedef int32u pixel_type;        static AGG_INLINE void blend_pix(pixel_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned alpha,                                          unsigned cover)        {            alpha = color_type::base_mask - alpha;            cover = (cover + 1) << (color_type::base_shift - 8);            pixel_type bgr = *p;            calc_type b = (bgr >> 16) & 0xFFC0;            calc_type g = (bgr >> 6)  & 0xFFE0;            calc_type r = (bgr << 5)  & 0xFFE0;            *p = (pixel_type)               ((((b * alpha + cb * cover)      ) & 0xFFC00000) |                (((g * alpha + cg * cover) >> 10) & 0x003FF800) |                 ((r * alpha + cr * cover) >> 21));        }        static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)        {            return (pixel_type)(((b & 0xFFC0) << 16) | ((g & 0xFFE0) << 6) | (r >> 5));        }        static AGG_INLINE color_type make_color(pixel_type p)        {            return color_type((p << 5)  & 0xFFE0,                              (p >> 6)  & 0xFFE0,                               (p >> 16) & 0xFFC0);        }    };    //=================================================blender_bgrABB_gamma    template<class Gamma> class blender_bgrABB_gamma    {    public:        typedef rgba16 color_type;        typedef color_type::value_type value_type;        typedef color_type::calc_type calc_type;        typedef int32u pixel_type;        typedef Gamma gamma_type;        blender_bgrABB_gamma() : m_gamma(0) {}        void gamma(const gamma_type& g) { m_gamma = &g; }        AGG_INLINE void blend_pix(pixel_type* p,                                   unsigned cr, unsigned cg, unsigned cb,                                  unsigned alpha,                                   unsigned)        {            pixel_type bgr = *p;            calc_type b = m_gamma->dir((bgr >> 16) & 0xFFC0);            calc_type g = m_gamma->dir((bgr >> 6)  & 0xFFE0);            calc_type r = m_gamma->dir((bgr << 5)  & 0xFFE0);            *p = (pixel_type)               (((m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 16)) >> 16) << 16) & 0xFFC00000) |                ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 16)) >> 16) << 6 ) & 0x003FF800) |                 (m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 16)) >> 16) >> 5 ));        }        static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)        {            return (pixel_type)(((b & 0xFFC0) << 16) | ((g & 0xFFE0) << 6) | (r >> 5));        }        static AGG_INLINE color_type make_color(pixel_type p)        {            return color_type((p << 5)  & 0xFFE0,                              (p >> 6)  & 0xFFE0,                               (p >> 16) & 0xFFC0);        }    private:        const Gamma* m_gamma;    };        //===========================================pixfmt_alpha_blend_rgb_packed    template<class Blender,  class RenBuf> class pixfmt_alpha_blend_rgb_packed    {    public:        typedef RenBuf   rbuf_type;        typedef typename rbuf_type::row_data row_data;        typedef Blender  blender_type;        typedef typename blender_type::color_type color_type;        typedef typename blender_type::pixel_type pixel_type;        typedef int                               order_type; // A fake one        typedef typename color_type::value_type   value_type;        typedef typename color_type::calc_type    calc_type;        enum base_scale_e         {            base_shift = color_type::base_shift,            base_scale = color_type::base_scale,            base_mask  = color_type::base_mask,            pix_width  = sizeof(pixel_type)        };    private:        //--------------------------------------------------------------------        AGG_INLINE void copy_or_blend_pix(pixel_type* p, const color_type& c, unsigned cover)        {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -