agg_span_image_resample.h

来自「这是VCF框架的代码」· C头文件 代码 · 共 181 行

H
181
字号
//----------------------------------------------------------------------------// Anti-Grain Geometry - Version 2.3// 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_SPAN_IMAGE_RESAMPLE_INCLUDED#define AGG_SPAN_IMAGE_RESAMPLE_INCLUDED#include "agg_span_image_filter.h"#include "agg_span_interpolator_linear.h"namespace agg{    //=====================================================span_image_resample    template<class ColorT, class Interpolator, class Allocator>     class span_image_resample :     public span_image_filter<ColorT, Interpolator, Allocator>    {    public:        typedef ColorT color_type;        typedef Interpolator interpolator_type;        typedef Allocator alloc_type;        typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;        //--------------------------------------------------------------------        span_image_resample(alloc_type& alloc) :             base_type(alloc),            m_scale_limit(20),            m_blur_x(image_subpixel_size),            m_blur_y(image_subpixel_size)        {}        //--------------------------------------------------------------------        span_image_resample(alloc_type& alloc,                            const rendering_buffer& src,                             const color_type& back_color,                            interpolator_type& inter,                            const image_filter_lut& filter) :            base_type(alloc, src, back_color, inter, &filter),            m_scale_limit(20),            m_blur_x(image_subpixel_size),            m_blur_y(image_subpixel_size)        {}        //--------------------------------------------------------------------        int  scale_limit() const { return m_scale_limit; }        void scale_limit(int v)  { m_scale_limit = v; }        //--------------------------------------------------------------------        double blur_x() const { return double(m_blur_x) / double(image_subpixel_size); }        double blur_y() const { return double(m_blur_y) / double(image_subpixel_size); }        void blur_x(double v) { m_blur_x = int(v * double(image_subpixel_size) + 0.5); }        void blur_y(double v) { m_blur_y = int(v * double(image_subpixel_size) + 0.5); }        void blur(double v)   { m_blur_x =                                 m_blur_y = int(v * double(image_subpixel_size) + 0.5); }    protected:        int m_scale_limit;        int m_blur_x;        int m_blur_y;    };    //==============================================span_image_resample_affine    template<class ColorT, class Allocator>     class span_image_resample_affine :     public span_image_filter<ColorT, span_interpolator_linear<trans_affine>, Allocator>    {    public:        typedef ColorT color_type;        typedef span_interpolator_linear<trans_affine> interpolator_type;        typedef Allocator alloc_type;        typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;        //--------------------------------------------------------------------        span_image_resample_affine(alloc_type& alloc) :             base_type(alloc),            m_scale_limit(200.0),            m_blur_x(1.0),            m_blur_y(1.0)        {}        //--------------------------------------------------------------------        span_image_resample_affine(alloc_type& alloc,                                   const rendering_buffer& src,                                    const color_type& back_color,                                   interpolator_type& inter,                                   const image_filter_lut& filter) :            base_type(alloc, src, back_color, inter, &filter),            m_scale_limit(200.0),            m_blur_x(1.0),            m_blur_y(1.0)        {}        //--------------------------------------------------------------------        int  scale_limit() const { return int(m_scale_limit); }        void scale_limit(int v)  { m_scale_limit = v; }        //--------------------------------------------------------------------        double blur_x() const { return m_blur_x; }        double blur_y() const { return m_blur_y; }        void blur_x(double v) { m_blur_x = v; }        void blur_y(double v) { m_blur_y = v; }        void blur(double v) { m_blur_x = m_blur_y = v; }        //--------------------------------------------------------------------        void prepare(unsigned max_span_len)         {            base_type::prepare(max_span_len);            double scale_x;            double scale_y;            base_type::interpolator().transformer().scaling_abs(&scale_x, &scale_y);            m_rx     = image_subpixel_size;            m_ry     = image_subpixel_size;            m_rx_inv = image_subpixel_size;            m_ry_inv = image_subpixel_size;            scale_x *= m_blur_x;            scale_y *= m_blur_y;            if(scale_x * scale_y > m_scale_limit)            {                scale_x = scale_x * m_scale_limit / (scale_x * scale_y);                scale_y = scale_y * m_scale_limit / (scale_x * scale_y);            }            if(scale_x > 1.0001)            {                if(scale_x > m_scale_limit) scale_x = m_scale_limit;                m_rx     = int(    scale_x * double(image_subpixel_size) + 0.5);                m_rx_inv = int(1.0/scale_x * double(image_subpixel_size) + 0.5);            }            if(scale_y > 1.0001)            {                if(scale_y > m_scale_limit) scale_y = m_scale_limit;                m_ry     = int(    scale_y * double(image_subpixel_size) + 0.5);                m_ry_inv = int(1.0/scale_y * double(image_subpixel_size) + 0.5);            }        }    protected:        int m_rx;        int m_ry;        int m_rx_inv;        int m_ry_inv;    private:        double m_scale_limit;        double m_blur_x;        double m_blur_y;    };}#endif

⌨️ 快捷键说明

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