agg_pixfmt_rgba.h

来自「这是VCF框架的代码」· C头文件 代码 · 共 1,565 行 · 第 1/5 页

H
1,565
字号
            long_type dg = p[Order::G];            long_type db = p[Order::B];            int       da = p[Order::A];            long_type d2a = da >> 1;            unsigned s2a = sa >> 1;            int r = (int)((((dr - d2a) * int((sr - s2a)*2 + base_mask)) >> base_shift) + d2a);             int g = (int)((((dg - d2a) * int((sg - s2a)*2 + base_mask)) >> base_shift) + d2a);             int b = (int)((((db - d2a) * int((sb - s2a)*2 + base_mask)) >> base_shift) + d2a);             r = (r < 0) ? 0 : r;            g = (g < 0) ? 0 : g;            b = (b < 0) ? 0 : b;            p[Order::R] = (value_type)((r > da) ? da : r);            p[Order::G] = (value_type)((g > da) ? da : g);            p[Order::B] = (value_type)((b > da) ? da : b);        }    };    //======================================================comp_op_table_rgba    template<class ColorT, class Order> struct comp_op_table_rgba    {        typedef typename ColorT::value_type value_type;        typedef void (*comp_op_func_type)(value_type* p,                                           unsigned cr,                                           unsigned cg,                                           unsigned cb,                                          unsigned ca,                                          unsigned cover);        static comp_op_func_type g_comp_op_func[];    };    //==========================================================g_comp_op_func    template<class ColorT, class Order>     typename comp_op_table_rgba<ColorT, Order>::comp_op_func_type    comp_op_table_rgba<ColorT, Order>::g_comp_op_func[] =     {        comp_op_rgba_clear      <ColorT,Order>::blend_pix,        comp_op_rgba_src        <ColorT,Order>::blend_pix,        comp_op_rgba_dst        <ColorT,Order>::blend_pix,        comp_op_rgba_src_over   <ColorT,Order>::blend_pix,        comp_op_rgba_dst_over   <ColorT,Order>::blend_pix,        comp_op_rgba_src_in     <ColorT,Order>::blend_pix,        comp_op_rgba_dst_in     <ColorT,Order>::blend_pix,        comp_op_rgba_src_out    <ColorT,Order>::blend_pix,        comp_op_rgba_dst_out    <ColorT,Order>::blend_pix,        comp_op_rgba_src_atop   <ColorT,Order>::blend_pix,        comp_op_rgba_dst_atop   <ColorT,Order>::blend_pix,        comp_op_rgba_xor        <ColorT,Order>::blend_pix,        comp_op_rgba_plus       <ColorT,Order>::blend_pix,        comp_op_rgba_minus      <ColorT,Order>::blend_pix,        comp_op_rgba_multiply   <ColorT,Order>::blend_pix,        comp_op_rgba_screen     <ColorT,Order>::blend_pix,        comp_op_rgba_overlay    <ColorT,Order>::blend_pix,        comp_op_rgba_darken     <ColorT,Order>::blend_pix,        comp_op_rgba_lighten    <ColorT,Order>::blend_pix,        comp_op_rgba_color_dodge<ColorT,Order>::blend_pix,        comp_op_rgba_color_burn <ColorT,Order>::blend_pix,        comp_op_rgba_hard_light <ColorT,Order>::blend_pix,        comp_op_rgba_soft_light <ColorT,Order>::blend_pix,        comp_op_rgba_difference <ColorT,Order>::blend_pix,        comp_op_rgba_exclusion  <ColorT,Order>::blend_pix,        comp_op_rgba_contrast   <ColorT,Order>::blend_pix,        0    };    //==============================================================comp_op_e    enum comp_op_e    {        comp_op_clear,         //----comp_op_clear        comp_op_src,           //----comp_op_src        comp_op_dst,           //----comp_op_dst        comp_op_src_over,      //----comp_op_src_over        comp_op_dst_over,      //----comp_op_dst_over        comp_op_src_in,        //----comp_op_src_in        comp_op_dst_in,        //----comp_op_dst_in        comp_op_src_out,       //----comp_op_src_out        comp_op_dst_out,       //----comp_op_dst_out        comp_op_src_atop,      //----comp_op_src_atop        comp_op_dst_atop,      //----comp_op_dst_atop        comp_op_xor,           //----comp_op_xor        comp_op_plus,          //----comp_op_plus        comp_op_minus,         //----comp_op_minus        comp_op_multiply,      //----comp_op_multiply        comp_op_screen,        //----comp_op_screen        comp_op_overlay,       //----comp_op_overlay        comp_op_darken,        //----comp_op_darken        comp_op_lighten,       //----comp_op_lighten        comp_op_color_dodge,   //----comp_op_color_dodge        comp_op_color_burn,    //----comp_op_color_burn        comp_op_hard_light,    //----comp_op_hard_light        comp_op_soft_light,    //----comp_op_soft_light        comp_op_difference,    //----comp_op_difference        comp_op_exclusion,     //----comp_op_exclusion        comp_op_contrast,      //----comp_op_contrast        end_of_comp_op_e    };    //====================================================comp_op_adaptor_rgba    template<class ColorT, class Order> struct comp_op_adaptor_rgba    {        typedef Order  order_type;        typedef ColorT color_type;        typedef typename color_type::value_type value_type;        enum base_scale_e        {              base_shift = color_type::base_shift,            base_mask  = color_type::base_mask         };        static AGG_INLINE void blend_pix(unsigned op, value_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned ca,                                         unsigned cover)        {            comp_op_table_rgba<ColorT, Order>::g_comp_op_func[op]                (p, (cr * ca + base_mask) >> base_shift,                     (cg * ca + base_mask) >> base_shift,                    (cb * ca + base_mask) >> base_shift,                     ca, cover);        }    };    //=========================================comp_op_adaptor_clip_to_dst_rgba    template<class ColorT, class Order> struct comp_op_adaptor_clip_to_dst_rgba    {        typedef Order  order_type;        typedef ColorT color_type;        typedef typename color_type::value_type value_type;        enum base_scale_e        {              base_shift = color_type::base_shift,            base_mask  = color_type::base_mask         };        static AGG_INLINE void blend_pix(unsigned op, value_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned ca,                                         unsigned cover)        {            cr = (cr * ca + base_mask) >> base_shift;            cg = (cg * ca + base_mask) >> base_shift;            cb = (cb * ca + base_mask) >> base_shift;            unsigned da = p[Order::A];            comp_op_table_rgba<ColorT, Order>::g_comp_op_func[op]                (p, (cr * da + base_mask) >> base_shift,                     (cg * da + base_mask) >> base_shift,                     (cb * da + base_mask) >> base_shift,                     (ca * da + base_mask) >> base_shift,                     cover);        }    };    //================================================comp_op_adaptor_rgba_pre    template<class ColorT, class Order> struct comp_op_adaptor_rgba_pre    {        typedef Order  order_type;        typedef ColorT color_type;        typedef typename color_type::value_type value_type;        enum base_scale_e        {              base_shift = color_type::base_shift,            base_mask  = color_type::base_mask         };        static AGG_INLINE void blend_pix(unsigned op, value_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned ca,                                         unsigned cover)        {            comp_op_table_rgba<ColorT, Order>::g_comp_op_func[op](p, cr, cg, cb, ca, cover);        }    };    //=====================================comp_op_adaptor_clip_to_dst_rgba_pre    template<class ColorT, class Order> struct comp_op_adaptor_clip_to_dst_rgba_pre    {        typedef Order  order_type;        typedef ColorT color_type;        typedef typename color_type::value_type value_type;        enum base_scale_e        {              base_shift = color_type::base_shift,            base_mask  = color_type::base_mask         };        static AGG_INLINE void blend_pix(unsigned op, value_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned ca,                                         unsigned cover)        {            unsigned da = p[Order::A];            comp_op_table_rgba<ColorT, Order>::g_comp_op_func[op]                (p, (cr * da + base_mask) >> base_shift,                     (cg * da + base_mask) >> base_shift,                     (cb * da + base_mask) >> base_shift,                     (ca * da + base_mask) >> base_shift,                     cover);        }    };    //=======================================================comp_adaptor_rgba    template<class BlenderPre> struct comp_adaptor_rgba    {        typedef typename BlenderPre::order_type order_type;        typedef typename BlenderPre::color_type color_type;        typedef typename color_type::value_type value_type;        enum base_scale_e        {              base_shift = color_type::base_shift,            base_mask  = color_type::base_mask         };        static AGG_INLINE void blend_pix(unsigned op, value_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned ca,                                         unsigned cover)        {            BlenderPre::blend_pix(p,                                   (cr * ca + base_mask) >> base_shift,                                   (cg * ca + base_mask) >> base_shift,                                  (cb * ca + base_mask) >> base_shift,                                  ca, cover);        }    };    //==========================================comp_adaptor_clip_to_dst_rgba    template<class BlenderPre> struct comp_adaptor_clip_to_dst_rgba    {        typedef typename BlenderPre::order_type order_type;        typedef typename BlenderPre::color_type color_type;        typedef typename color_type::value_type value_type;        enum base_scale_e        {              base_shift = color_type::base_shift,            base_mask  = color_type::base_mask         };        static AGG_INLINE void blend_pix(unsigned op, value_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned ca,                                         unsigned cover)        {            cr = (cr * ca + base_mask) >> base_shift;            cg = (cg * ca + base_mask) >> base_shift;            cb = (cb * ca + base_mask) >> base_shift;            unsigned da = p[order_type::A];            BlenderPre::blend_pix(p,                                   (cr * da + base_mask) >> base_shift,                                   (cg * da + base_mask) >> base_shift,                                   (cb * da + base_mask) >> base_shift,                                   (ca * da + base_mask) >> base_shift,                                   cover);        }    };    //======================================comp_adaptor_clip_to_dst_rgba_pre    template<class BlenderPre> struct comp_adaptor_clip_to_dst_rgba_pre    {        typedef typename BlenderPre::order_type order_type;        typedef typename BlenderPre::color_type color_type;        typedef typename color_type::value_type value_type;        enum base_scale_e        {              base_shift = color_type::base_shift,            base_mask  = color_type::base_mask         };        static AGG_INLINE void blend_pix(unsigned op, value_type* p,                                          unsigned cr, unsigned cg, unsigned cb,                                         unsigned ca,                                         unsigned cover)        {            unsigned da = p[order_type::A];            BlenderPre::blend_pix(p,                                   (cr * da + base_mask) >> base_shift,                                   (cg * da + base_mask) >> base_shift,                                   (cb * da + base_mask) >> base_shift,                                   (ca * da + base_mask) >> base_shift,                                   cover);        }    };    //===============================================copy_or_blend_rgba_wrapper    template<class Blender> struct copy_or_blend_rgba_wrapper    {        typedef typename Blender::color_type color_type;        typedef typename Blender::order_type order_type;        t

⌨️ 快捷键说明

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