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

📄 agg_pixfmt_rgb_packed.h

📁 这是VCF框架的代码
💻 H
📖 第 1 页 / 共 3 页
字号:
            if (c.a)            {                calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;                if(alpha == base_mask)                {                    *p = m_blender.make_pix(c.r, c.g, c.b);                }                else                {                    m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover);                }            }        }    public:        //--------------------------------------------------------------------        pixfmt_alpha_blend_rgb_packed(rbuf_type& rb) : m_rbuf(&rb) {}        void attach(rbuf_type& rb) { m_rbuf = &rb; }        Blender& blender() { return m_blender; }        //--------------------------------------------------------------------        AGG_INLINE unsigned width()  const { return m_rbuf->width();  }        AGG_INLINE unsigned height() const { return m_rbuf->height(); }        //--------------------------------------------------------------------        const int8u* row_ptr(int y) const        {            return m_rbuf->row_ptr(y);        }        //--------------------------------------------------------------------        const int8u* pix_ptr(int x, int y) const        {            return m_rbuf->row_ptr(y) + x * pix_width;        }        //--------------------------------------------------------------------        row_data row(int x, int y) const        {            return m_rbuf->row(y);        }        //--------------------------------------------------------------------        AGG_INLINE void make_pix(int8u* p, const color_type& c)        {            *(pixel_type*)p = m_blender.make_pix(c.r, c.g, c.b);        }        //--------------------------------------------------------------------        AGG_INLINE color_type pixel(int x, int y) const        {            return m_blender.make_color(((pixel_type*)m_rbuf->row_ptr(y))[x]);        }        //--------------------------------------------------------------------        AGG_INLINE void copy_pixel(int x, int y, const color_type& c)        {            ((pixel_type*)                m_rbuf->row_ptr(x, y, 1))[x] =                     m_blender.make_pix(c.r, c.g, c.b);        }        //--------------------------------------------------------------------        AGG_INLINE void blend_pixel(int x, int y, const color_type& c, int8u cover)        {            copy_or_blend_pix((pixel_type*)m_rbuf->row_ptr(x, y, 1) + x, c, cover);        }        //--------------------------------------------------------------------        AGG_INLINE void copy_hline(int x, int y,                                    unsigned len,                                    const color_type& c)        {            pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y, len) + x;            pixel_type v = m_blender.make_pix(c.r, c.g, c.b);            do            {                *p++ = v;            }            while(--len);        }        //--------------------------------------------------------------------        AGG_INLINE void copy_vline(int x, int y,                                   unsigned len,                                    const color_type& c)        {            pixel_type v = m_blender.make_pix(c.r, c.g, c.b);            do            {                pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y++, 1) + x;                *p = v;            }            while(--len);        }        //--------------------------------------------------------------------        void blend_hline(int x, int y,                         unsigned len,                          const color_type& c,                         int8u cover)        {            if (c.a)            {                pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y, len) + x;                calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;                if(alpha == base_mask)                {                    pixel_type v = m_blender.make_pix(c.r, c.g, c.b);                    do                    {                        *p++ = v;                    }                    while(--len);                }                else                {                    do                    {                        m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover);                        ++p;                    }                    while(--len);                }            }        }        //--------------------------------------------------------------------        void blend_vline(int x, int y,                         unsigned len,                          const color_type& c,                         int8u cover)        {            if (c.a)            {                calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;                if(alpha == base_mask)                {                    pixel_type v = m_blender.make_pix(c.r, c.g, c.b);                    do                    {                        ((pixel_type*)m_rbuf->row_ptr(x, y++, 1))[x] = v;                    }                    while(--len);                }                else                {                    do                    {                        m_blender.blend_pix(                            (pixel_type*)m_rbuf->row_ptr(x, y++, 1),                             c.r, c.g, c.b, alpha, cover);                    }                    while(--len);                }            }        }        //--------------------------------------------------------------------        void blend_solid_hspan(int x, int y,                               unsigned len,                                const color_type& c,                               const int8u* covers)        {            pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y, len) + x;            do             {                copy_or_blend_pix(p, c, *covers++);                ++p;            }            while(--len);        }        //--------------------------------------------------------------------        void blend_solid_vspan(int x, int y,                               unsigned len,                                const color_type& c,                               const int8u* covers)        {            do             {                copy_or_blend_pix((pixel_type*)m_rbuf->row_ptr(x, y++, 1) + x,                                   c, *covers++);            }            while(--len);        }        //--------------------------------------------------------------------        void copy_color_hspan(int x, int y,                              unsigned len,                               const color_type* colors)        {            pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y, len) + x;            do             {                *p++ = m_blender.make_pix(colors->r, colors->g, colors->b);                ++colors;            }            while(--len);        }        //--------------------------------------------------------------------        void blend_color_hspan(int x, int y,                               unsigned len,                                const color_type* colors,                               const int8u* covers,                               int8u cover)        {            pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y, len) + x;            do             {                copy_or_blend_pix(p++, *colors++, covers ? *covers++ : cover);            }            while(--len);        }        //--------------------------------------------------------------------        void blend_color_vspan(int x, int y,                               unsigned len,                                const color_type* colors,                               const int8u* covers,                               int8u cover)        {            do             {                copy_or_blend_pix((pixel_type*)m_rbuf->row_ptr(x, y++, 1) + x,                                   *colors++, covers ? *covers++ : cover);            }            while(--len);        }                //--------------------------------------------------------------------        template<class RenBuf2>        void copy_from(const RenBuf2& from,                        int xdst, int ydst,                       int xsrc, int ysrc,                       unsigned len)        {            const int8u* p = from.row_ptr(ysrc);            if(p)            {                memmove(m_rbuf->row_ptr(xdst, ydst, len) + xdst * pix_width,                         p + xsrc * pix_width,                         len * pix_width);            }        }        //--------------------------------------------------------------------        template<class SrcPixelFormatRenderer>        void blend_from(const SrcPixelFormatRenderer& from,                         int xdst, int ydst,                        int xsrc, int ysrc,                        unsigned len,                        int8u cover)        {            typedef typename SrcPixelFormatRenderer::order_type src_order;            const value_type* psrc = (const value_type*)from.row_ptr(ysrc);            if(psrc)            {                psrc += xsrc * 4;                pixel_type* pdst =                     (pixel_type*)m_rbuf->row_ptr(xdst, ydst, len) + xdst;                do                 {                    value_type alpha = psrc[src_order::A];                    if(alpha)                    {                        if(alpha == base_mask && cover == 255)                        {                            *pdst = m_blender.make_pix(psrc[src_order::R],                                                        psrc[src_order::G],                                                       psrc[src_order::B]);                        }                        else                        {                            m_blender.blend_pix(pdst,                                                 psrc[src_order::R],                                                psrc[src_order::G],                                                psrc[src_order::B],                                                alpha,                                                cover);                        }                    }                    psrc += 4;                    ++pdst;                }                while(--len);            }        }    private:        rbuf_type* m_rbuf;        Blender    m_blender;    };    typedef pixfmt_alpha_blend_rgb_packed<blender_rgb555, rendering_buffer> pixfmt_rgb555; //----pixfmt_rgb555    typedef pixfmt_alpha_blend_rgb_packed<blender_rgb565, rendering_buffer> pixfmt_rgb565; //----pixfmt_rgb565    typedef pixfmt_alpha_blend_rgb_packed<blender_rgb555_pre, rendering_buffer> pixfmt_rgb555_pre; //----pixfmt_rgb555_pre    typedef pixfmt_alpha_blend_rgb_packed<blender_rgb565_pre, rendering_buffer> pixfmt_rgb565_pre; //----pixfmt_rgb565_pre    typedef pixfmt_alpha_blend_rgb_packed<blender_rgbAAA, rendering_buffer> pixfmt_rgbAAA; //----pixfmt_rgbAAA    typedef pixfmt_alpha_blend_rgb_packed<blender_bgrAAA, rendering_buffer> pixfmt_bgrAAA; //----pixfmt_bgrAAA    typedef pixfmt_alpha_blend_rgb_packed<blender_rgbBBA, rendering_buffer> pixfmt_rgbBBA; //----pixfmt_rgbBBA    typedef pixfmt_alpha_blend_rgb_packed<blender_bgrABB, rendering_buffer> pixfmt_bgrABB; //----pixfmt_bgrABB    typedef pixfmt_alpha_blend_rgb_packed<blender_rgbAAA_pre, rendering_buffer> pixfmt_rgbAAA_pre; //----pixfmt_rgbAAA_pre    typedef pixfmt_alpha_blend_rgb_packed<blender_bgrAAA_pre, rendering_buffer> pixfmt_bgrAAA_pre; //----pixfmt_bgrAAA_pre    typedef pixfmt_alpha_blend_rgb_packed<blender_rgbBBA_pre, rendering_buffer> pixfmt_rgbBBA_pre; //----pixfmt_rgbBBA_pre    typedef pixfmt_alpha_blend_rgb_packed<blender_bgrABB_pre, rendering_buffer> pixfmt_bgrABB_pre; //----pixfmt_bgrABB_pre    //-----------------------------------------------------pixfmt_rgb555_gamma    template<class Gamma> class pixfmt_rgb555_gamma :     public pixfmt_alpha_blend_rgb_packed<blender_rgb555_gamma<Gamma>,                                          rendering_buffer>    {    public:        pixfmt_rgb555_gamma(rendering_buffer& rb, const Gamma& g) :            pixfmt_alpha_blend_rgb_packed<blender_rgb555_gamma<Gamma>,                                           rendering_buffer>(rb)         {            this->blender().gamma(g);        }    };    //-----------------------------------------------------pixfmt_rgb565_gamma    template<class Gamma> class pixfmt_rgb565_gamma :     public pixfmt_alpha_blend_rgb_packed<blender_rgb565_gamma<Gamma>, rendering_buffer>    {    public:        pixfmt_rgb565_gamma(rendering_buffer& rb, const Gamma& g) :            pixfmt_alpha_blend_rgb_packed<blender_rgb565_gamma<Gamma>, rendering_buffer>(rb)         {            this->blender().gamma(g);        }    };    //-----------------------------------------------------pixfmt_rgbAAA_gamma    template<class Gamma> class pixfmt_rgbAAA_gamma :     public pixfmt_alpha_blend_rgb_packed<blender_rgbAAA_gamma<Gamma>,                                          rendering_buffer>    {    public:        pixfmt_rgbAAA_gamma(rendering_buffer& rb, const Gamma& g) :            pixfmt_alpha_blend_rgb_packed<blender_rgbAAA_gamma<Gamma>,                                           rendering_buffer>(rb)         {            this->blender().gamma(g);        }    };    //-----------------------------------------------------pixfmt_bgrAAA_gamma    template<class Gamma> class pixfmt_bgrAAA_gamma :     public pixfmt_alpha_blend_rgb_packed<blender_bgrAAA_gamma<Gamma>,                                          rendering_buffer>    {    public:        pixfmt_bgrAAA_gamma(rendering_buffer& rb, const Gamma& g) :            pixfmt_alpha_blend_rgb_packed<blender_bgrAAA_gamma<Gamma>,                                           rendering_buffer>(rb)         {            this->blender().gamma(g);        }    };    //-----------------------------------------------------pixfmt_rgbBBA_gamma    template<class Gamma> class pixfmt_rgbBBA_gamma :     public pixfmt_alpha_blend_rgb_packed<blender_rgbBBA_gamma<Gamma>,                                          rendering_buffer>    {    public:        pixfmt_rgbBBA_gamma(rendering_buffer& rb, const Gamma& g) :            pixfmt_alpha_blend_rgb_packed<blender_rgbBBA_gamma<Gamma>,                                           rendering_buffer>(rb)         {            this->blender().gamma(g);        }    };    //-----------------------------------------------------pixfmt_bgrABB_gamma    template<class Gamma> class pixfmt_bgrABB_gamma :     public pixfmt_alpha_blend_rgb_packed<blender_bgrABB_gamma<Gamma>,                                          rendering_buffer>    {    public:        pixfmt_bgrABB_gamma(rendering_buffer& rb, const Gamma& g) :            pixfmt_alpha_blend_rgb_packed<blender_bgrABB_gamma<Gamma>,                                           rendering_buffer>(rb)         {            this->blender().gamma(g);        }    };}#endif

⌨️ 快捷键说明

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