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 + -
显示快捷键?