12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- //----------------------------------------------------------------------------
- // Anti-Grain Geometry - Version 2.4
- // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
- //
- // Permission to copy, use, modify, sell and distribute this software
- // is granted provided this copyright notice appears in all copies.
- // This software is provided "as is" without express or implied
- // warranty, and with no claim as to its suitability for any purpose.
- //
- //----------------------------------------------------------------------------
- // Contact: mcseem@antigrain.com
- // mcseemagg@yahoo.com
- // http://www.antigrain.com
- //----------------------------------------------------------------------------
- #ifndef AGG_PIXFMT_BASE_INCLUDED
- #define AGG_PIXFMT_BASE_INCLUDED
- #include "agg_basics.h"
- #include "agg_color_gray.h"
- #include "agg_color_rgba.h"
- namespace agg
- {
- struct pixfmt_gray_tag
- {
- };
- struct pixfmt_rgb_tag
- {
- };
- struct pixfmt_rgba_tag
- {
- };
- //--------------------------------------------------------------blender_base
- template<class ColorT, class Order = void>
- struct blender_base
- {
- typedef ColorT color_type;
- typedef Order order_type;
- typedef typename color_type::value_type value_type;
- static rgba get(value_type r, value_type g, value_type b, value_type a, cover_type cover = cover_full)
- {
- if (cover > cover_none)
- {
- rgba c(
- color_type::to_double(r),
- color_type::to_double(g),
- color_type::to_double(b),
- color_type::to_double(a));
- if (cover < cover_full)
- {
- double x = double(cover) / cover_full;
- c.r *= x;
- c.g *= x;
- c.b *= x;
- c.a *= x;
- }
- return c;
- }
- else return rgba::no_color();
- }
- static rgba get(const value_type* p, cover_type cover = cover_full)
- {
- return get(
- p[order_type::R],
- p[order_type::G],
- p[order_type::B],
- p[order_type::A],
- cover);
- }
- static void set(value_type* p, value_type r, value_type g, value_type b, value_type a)
- {
- p[order_type::R] = r;
- p[order_type::G] = g;
- p[order_type::B] = b;
- p[order_type::A] = a;
- }
- static void set(value_type* p, const rgba& c)
- {
- p[order_type::R] = color_type::from_double(c.r);
- p[order_type::G] = color_type::from_double(c.g);
- p[order_type::B] = color_type::from_double(c.b);
- p[order_type::A] = color_type::from_double(c.a);
- }
- };
- }
- #endif
|