public span_image_filter_gray_bilinear_clip(source_type src,
                                             color_type back_color,
                                             interpolator_type inter) :
     base(src, inter, 0)
 {
     m_back_color = (back_color);
 }
 //--------------------------------------------------------------------
 public void generate(color_type* span, int x, int y, unsigned len)
 {
     base_type::interpolator().begin(x + base_type::filter_dx_dbl(), 
                                     y + base_type::filter_dy_dbl(), len);
     do
     {
         base_type::interpolator().coordinates(&x, &y);
         span->v = *(value_type*)
             base_type::source().span(x >> image_subpixel_shift, 
                                      y >> image_subpixel_shift, 
                                      1);
         span->a = base_mask;
         ++span;
         ++base_type::interpolator();
     } while(--len);
 }
示例#3
0
        /*-------------------------------------------------------------------------
         *
         * ---------------------------------------------------------------------------*/
        public sea_area(gvt_lib lib, string fname)
        {
            m_lib = lib;

            m_angle      = 0;
            m_angle2     = 0;
            m_color_type = color_type.type1;
            m_groups     = new List <sea_area_once>();

            m_progress_max      = 0;
            m_progress_current  = 0;
            m_progress_info_str = "";
            m_is_loaded_mask    = false;

            sea_area_once once;

            // 카리브해
            once = new sea_area_once("카리브해");
            once.Add("산후안 앞바다", new Vector2(3970, 1049), new Vector2(73, 149), true);
            once.Add("안틸 제도 앞바다", new Vector2(3819, 1049), new Vector2(150, 149), true);
            once.Add("중앙대서양", new Vector2(4044, 1199), new Vector2(373, 148), false);
            once.Add("서 카리브 해", new Vector2(3670, 1049), new Vector2(148, 136), true);
            once.Add("", new Vector2(3753, 1185), new Vector2(65, 124), true);

            once.Add("코드 곶 앞바다", new Vector2(3819, 750), new Vector2(224, 148), true);
            once.Add("버뮤다제도 앞바다", new Vector2(3717, 899), new Vector2(326, 149), true);
            once.Add("테라 노바 앞바다", new Vector2(3790 - 1, 600), new Vector2(254, 149), true);
            m_groups.Add(once);

            // 아프리카 서해안
            once = new sea_area_once("아프리카 서해안");
            once.Add("곡물해안 앞바다", new Vector2(4418, 1199), new Vector2(224, 299), true);
            once.Add("황금해안 앞바다", new Vector2(4643, 1325), new Vector2(149, 173), true);
            once.Add("기니 만", new Vector2(1, 1322), new Vector2(164, 176), true);
            m_groups.Add(once);

            // 남대서양
            once = new sea_area_once("남대서양");
            once.Add("나미비아 앞바다", new Vector2(1, 1499), new Vector2(180, 149), true);
            once.Add("희망봉 앞바다", new Vector2(1, 1649), new Vector2(297, 223), true);
            once.Add("케이프 해저분지", new Vector2(1, 1873), new Vector2(297, 224), false);
            once.Add("남대서양", new Vector2(4494, 1499), new Vector2(298, 599), false);
            m_groups.Add(once);

            // 아프리카 동해안
            once = new sea_area_once("아프리카 동해안");
            once.Add("아굴라스 곶", new Vector2(299, 1683), new Vector2(149, 189), true);
            once.Add("아굴라스 해저분지", new Vector2(299, 1873), new Vector2(299, 225), false);
            once.Add("모잠비크 해협", new Vector2(449, 1649), new Vector2(149, 223), true);
            once.Add("마다가스카르 앞바다", new Vector2(458, 1500), new Vector2(440, 149), true);
            once.Add("남서 인도양", new Vector2(599, 1649), new Vector2(299, 449), true);
            m_groups.Add(once);

            // 홍해
            once = new sea_area_once("홍해");
            once.Add("잔지바르 앞바다", new Vector2(513, 1348), new Vector2(385, 151), true);
            once.Add("아라비아 해", new Vector2(600, 1199), new Vector2(298, 149), true);
            once.Add("홍해", new Vector2(457, 1076), new Vector2(142, 202), true);
            once.Add("페르시아 만", new Vector2(638, 1086), new Vector2(260, 112), true);
            m_groups.Add(once);

            // 인도양
            once = new sea_area_once("인도양");
            once.Add("인도 서쪽 해안 앞바다", new Vector2(899, 1125), new Vector2(109, 149), true);
            once.Add("인도 남쪽 해안 앞바다", new Vector2(899, 1274), new Vector2(224, 149), true);
            once.Add("벵갈만", new Vector2(1067, 1134), new Vector2(272, 139), true);
            once.Add("중부 인도양", new Vector2(899, 1424), new Vector2(449, 224), true);
            once.Add("남 인도양", new Vector2(899, 1649), new Vector2(301, 449), false);
            once.Add("남동 인도양", new Vector2(1201, 1649), new Vector2(296, 449), false);
            m_groups.Add(once);

            // 중남미 동해안
            once = new sea_area_once("중남미 동해안");
            once.Add("남 카리브 해", new Vector2(3819, 1199), new Vector2(224, 148), true);
            once.Add("멕시코만", new Vector2(3497, 1055), new Vector2(173, 132), true);
            once.Add("산로케곶 앞바다", new Vector2(4194, 1348), new Vector2(223, 150), true);
            once.Add("아마존강 유역", new Vector2(3900, 1348), new Vector2(293, 117), true);
            once.Add("남서 대서양", new Vector2(4194, 1499), new Vector2(299, 373), true);
            once.Add("부에노스아이레스 앞바다", new Vector2(3946, 1678), new Vector2(248, 195), true);
            once.Add("아르헨티나 해저분지", new Vector2(3894, 1873), new Vector2(374, 225), true);
            once.Add("조지아 해저분지", new Vector2(4269, 1873), new Vector2(224, 225), false);
            m_groups.Add(once);

            // 동남아시아
            once = new sea_area_once("동남아시아");
            once.Add("안다만 해", new Vector2(1124, 1274), new Vector2(224, 149), true);
            once.Add("자바 해", new Vector2(1349, 1348), new Vector2(224, 150), true);
            once.Add("자바섬 남쪽 앞바다", new Vector2(1349, 1500), new Vector2(224, 73), false);
            once.Add("", new Vector2(1349, 1572), new Vector2(148, 76), false);
            once.Add("시암만", new Vector2(1349, 1199), new Vector2(149, 148), true);
            once.Add("반다 해", new Vector2(1574, 1423), new Vector2(298, 150), true);
            once.Add("셀레베스 해", new Vector2(1499, 1199), new Vector2(223, 148), true);
            once.Add("", new Vector2(1574, 1347), new Vector2(148, 76), true);
            once.Add("서캐롤린 해저분지", new Vector2(1723, 1199), new Vector2(149, 223), true);
            m_groups.Add(once);

            // 남태평양
            once = new sea_area_once("남태평양");
            once.Add("칠레 해저분지", new Vector2(3595, 1797), new Vector2(299, 301), true);
            once.Add("오스트레일리아 서부 해저분지", new Vector2(1498, 1573), new Vector2(224, 224), true);
            once.Add("퍼스 해저분지", new Vector2(1498, 1798), new Vector2(224, 300), true);
            once.Add("오스트레일리아 남부 해저분지", new Vector2(1723, 1893), new Vector2(299, 205), true);
            once.Add("아라푸라 해", new Vector2(1723, 1573), new Vector2(373, 211), true);
            once.Add("", new Vector2(1873, 1497), new Vector2(223, 76), true);
            once.Add("동 캐롤라인 해저분지", new Vector2(1873, 1199), new Vector2(223, 297), true);
            once.Add("멜라네시아 해저분지", new Vector2(2097, 1199), new Vector2(223, 298), false);
            once.Add("산호해", new Vector2(2097, 1498), new Vector2(299, 299), true);
            once.Add("태즈먼 해", new Vector2(2023, 1798), new Vector2(448, 300), true);
            once.Add("중앙 태평양 해저분지 서쪽", new Vector2(2321, 1199), new Vector2(373, 298), false);
            once.Add("사모아 해저분지", new Vector2(2397, 1498), new Vector2(224, 299), true);
            once.Add("남태평양 해저분지 서쪽", new Vector2(2472, 1798), new Vector2(298, 300), false);
            once.Add("중앙 태평양 해저분지", new Vector2(2695, 1199), new Vector2(449, 298), false);
            once.Add("남태평양 해저분지 북쪽", new Vector2(2622, 1498), new Vector2(523, 299), false);
            once.Add("남태평양 해저분지", new Vector2(2771, 1798), new Vector2(374, 300), false);
            once.Add("남태평양 해저분지 동쪽", new Vector2(3146, 1498), new Vector2(448, 600), false);
            once.Add("하와이 앞바다", new Vector2(2321, 751), new Vector2(449, 447), true);
            m_groups.Add(once);

            // 중남미 서해안
            once = new sea_area_once("중남미 서해안");
            once.Add("페루 해저분지", new Vector2(3595, 1498), new Vector2(260, 298), true);
            once.Add("과야킬 만", new Vector2(3595, 1350), new Vector2(126, 147), true);
            once.Add("파나마 만", new Vector2(3595, 1234), new Vector2(136, 114), true);
            once.Add("중앙 태평양 해저분지 동쪽", new Vector2(3145, 1199), new Vector2(299, 298), true);
            once.Add("갈라파고스제도 앞바다", new Vector2(3445, 1350), new Vector2(149, 147), true);
            once.Add("테우안테펙 만", new Vector2(3445, 1234), new Vector2(149, 114), true);
            m_groups.Add(once);

            // 동아시아
            once = new sea_area_once("동아시아");
            once.Add("동아시아 서부", new Vector2(1393, 912), new Vector2(254, 286), true);
            once.Add("동아시아 동부", new Vector2(1649, 751), new Vector2(373, 447), true);
            once.Add("북서 태평양 해저분지", new Vector2(2024, 751), new Vector2(297, 447), true);
            m_groups.Add(once);

            // 극북대서양
            once = new sea_area_once("극북대서양");
            once.Add("프람 해협", new Vector2(4344, 0), new Vector2(224, 294), true);
            once.Add("덴마크 해저분지", new Vector2(4344, 295), new Vector2(224, 155), false);
            once.Add("로포텐 해저분지", new Vector2(4569, 0), new Vector2(223, 294), true);
            once.Add("노르웨이 해저분지", new Vector2(4569, 295), new Vector2(224, 155), false);
            once.Add("노르웨이 해저분지2", new Vector2(0, 295), new Vector2(74, 155), false);
            m_groups.Add(once);

            // 유럽 극북
            once = new sea_area_once("유럽 극북");
            once.Add("서 바렌츠해", new Vector2(1, 0), new Vector2(447, 294), true);
            once.Add("북 노르웨이해", new Vector2(75, 295), new Vector2(300, 155), true);
            once.Add("동 바렌츠해", new Vector2(449, 0), new Vector2(304, 294), true);
            once.Add("동 바렌츠해2", new Vector2(601, 294), new Vector2(152, 156), true);
            once.Add("백해", new Vector2(376, 295), new Vector2(223, 225), true);
            m_groups.Add(once);

            // 유라시아 북쪽
            once = new sea_area_once("유라시아 북쪽");
            once.Add("서 카라해", new Vector2(754, 0), new Vector2(369, 450), true);
            once.Add("동 카라해", new Vector2(1124, 0), new Vector2(294, 450), true);
            once.Add("라프테프 해", new Vector2(1419, 0), new Vector2(298, 450), true);
            m_groups.Add(once);

            // 유라시아 극동
            once = new sea_area_once("유라시아 극동");
            once.Add("코텔니 섬 앞바다", new Vector2(1718, 0), new Vector2(304, 450), true);
            once.Add("동 시베리아 해", new Vector2(2023, 0), new Vector2(373, 450), true);
            once.Add("추크치 해", new Vector2(2397, 0), new Vector2(297, 450), true);
            m_groups.Add(once);

            // 베링 해
            once = new sea_area_once("베링 해");
            once.Add("동 베링해", new Vector2(2472, 451), new Vector2(222, 298), true);
            once.Add("서 베링해", new Vector2(2246, 451), new Vector2(225, 298), true);
            once.Add("캄차카 반도 앞바다", new Vector2(2023, 451), new Vector2(222, 298), true);
            once.Add("오호츠크 해", new Vector2(1648, 451), new Vector2(374, 298), true);
            m_groups.Add(once);

            // 북미 서해안
            once = new sea_area_once("북미 서해안");
            once.Add("알렉산더 제도 앞바다", new Vector2(2994, 451), new Vector2(223, 447), true);
            once.Add("북동태평양", new Vector2(2770, 750), new Vector2(223, 448), false);
            once.Add("알래스카 만", new Vector2(2695, 451), new Vector2(298, 298), true);
            once.Add("캘리포니아 만", new Vector2(3218, 899), new Vector2(254, 299), true);
            once.Add("샌프란시스코 앞바다", new Vector2(2994, 899), new Vector2(223, 299), true);
            m_groups.Add(once);

            // 동 캐나다
            once = new sea_area_once("동 캐나다");
            once.Add("허드슨 해협", new Vector2(3746, 451), new Vector2(148, 148), true);
            once.Add("허드슨 만", new Vector2(3595, 451), new Vector2(150, 298), true);
            once.Add("배핀 만", new Vector2(3895, 295), new Vector2(147, 155), false);
            once.Add("배핀 앞바다", new Vector2(3595, 295), new Vector2(299, 155), true);
            once.Add("엘즈미어 앞바다", new Vector2(3595, 0), new Vector2(447, 294), true);
            m_groups.Add(once);

            // 서 캐나다
            once = new sea_area_once("서 캐나다");
            once.Add("북극제도 앞바다", new Vector2(3218, 0), new Vector2(376, 450), true);
            once.Add("보퍼트 해", new Vector2(2994, 0), new Vector2(223, 450), true);
            once.Add("배로우 곶 앞바다", new Vector2(2695, 0), new Vector2(298, 450), true);
            m_groups.Add(once);

            // 그린란드 앞바다 2개가 빠진 상태

            // 읽기
            load(fname);
        }
示例#4
0
            /*-------------------------------------------------------------------------
             * 그리기
             * ---------------------------------------------------------------------------*/
            public void Draw(Vector2 offset, LoopXImage image, int alpha, int alpha2, color_type type)
            {
                if (m_type == sea_type.normal)
                {
                    return;                                               // 통상상태
                }
                int color;

                // 지도の종류によって색を若干変える
                if (m_type == sea_type.safty)
                {
                    // 안전
                    if (type == color_type.type1)
                    {
                        color = Color.FromArgb(alpha, 0, 128, 220).ToArgb();
                    }
                    else
                    {
                        color = Color.FromArgb(alpha, 0, 64, 200).ToArgb();
                    }
                }
                else
                {
                    // 무법
                    if (type == color_type.type1)
                    {
                        color = Color.FromArgb(alpha2, 200, 0, 0).ToArgb();
                    }
                    else
                    {
                        color = Color.FromArgb(alpha2, 200, 0, 0).ToArgb();
                    }
                }
                foreach (data d in m_list)
                {
                    d.Draw(offset, image, color);
                }
            }
        //--------------------------------------------------------------------
        public void generate(color_type* span, int x, int y, unsigned len)
        {
            base_type::interpolator().begin(x + base_type::filter_dx_dbl(), 
                                            y + base_type::filter_dy_dbl(), len);
            long_type fg;

            int diameter = base_type::filter().diameter();
            int filter_scale = diameter << image_subpixel_shift;

            int16* weight_array = base_type::filter().weight_array();
            do
            {
                int rx;
                int ry;
                int rx_inv = image_subpixel_scale;
                int ry_inv = image_subpixel_scale;
                base_type::interpolator().coordinates(&x,  &y);
                base_type::interpolator().local_scale(&rx, &ry);
                base_type::adjust_scale(&rx, &ry);

                rx_inv = image_subpixel_scale * image_subpixel_scale / rx;
                ry_inv = image_subpixel_scale * image_subpixel_scale / ry;

                int radius_x = (diameter * rx) >> 1;
                int radius_y = (diameter * ry) >> 1;
                int len_x_lr = 
                    (diameter * rx + image_subpixel_mask) >> 
                        image_subpixel_shift;

                x += base_type::filter_dx_int() - radius_x;
                y += base_type::filter_dy_int() - radius_y;

                fg = image_filter_scale / 2;

                int y_lr = y >> image_subpixel_shift;
                int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) * 
                               ry_inv) >> 
                                   image_subpixel_shift;
                int total_weight = 0;
                int x_lr = x >> image_subpixel_shift;
                int x_hr = ((image_subpixel_mask - (x & image_subpixel_mask)) * 
                               rx_inv) >> 
                                   image_subpixel_shift;
                int x_hr2 = x_hr;
                value_type* fg_ptr = 
                    (value_type*)base_type::source().span(x_lr, y_lr, len_x_lr);

                for(;;)
                {
                    int weight_y = weight_array[y_hr];
                    x_hr = x_hr2;
                    for(;;)
                    {
                        int weight = (weight_y * weight_array[x_hr] + 
                                     image_filter_scale / 2) >> 
                                     downscale_shift;
                        fg += *fg_ptr * weight;
                        total_weight += weight;
                        x_hr  += rx_inv;
                        if(x_hr >= filter_scale) break;
                        fg_ptr = (value_type*)base_type::source().next_x();
                    }
                    y_hr += ry_inv;
                    if(y_hr >= filter_scale) break;
                    fg_ptr = (value_type*)base_type::source().next_y();
                }

                fg /= total_weight;
                if(fg < 0) fg = 0;
                if(fg > base_mask) fg = base_mask;

                span->v = (value_type)fg;
                span->a = base_mask;

                ++span;
                ++base_type::interpolator();
            } while(--len);
        }
        //--------------------------------------------------------------------
        public void generate(color_type* span, int x, int y, unsigned len)
        {
            base_type::interpolator().begin(x + base_type::filter_dx_dbl(), 
                                            y + base_type::filter_dy_dbl(), len);

            int fg;
            value_type *fg_ptr;

            unsigned     diameter     = base_type::filter().diameter();
            int          start        = base_type::filter().start();
            int16* weight_array = base_type::filter().weight_array();

            int x_count; 
            int weight_y;

            do
            {
                base_type::interpolator().coordinates(&x, &y);

                x -= base_type::filter_dx_int();
                y -= base_type::filter_dy_int();

                int x_hr = x; 
                int y_hr = y; 

                int x_lr = x_hr >> image_subpixel_shift;
                int y_lr = y_hr >> image_subpixel_shift;

                fg = image_filter_scale / 2;

                int x_fract = x_hr & image_subpixel_mask;
                unsigned y_count = diameter;

                y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask);
                fg_ptr = (value_type*)base_type::source().span(x_lr + start, 
                                                                     y_lr + start, 
                                                                     diameter);
                for(;;)
                {
                    x_count  = diameter;
                    weight_y = weight_array[y_hr];
                    x_hr = image_subpixel_mask - x_fract;
                    for(;;)
                    {
                        fg += *fg_ptr * 
                              ((weight_y * weight_array[x_hr] + 
                                image_filter_scale / 2) >> 
                                image_filter_shift);
                        if(--x_count == 0) break;
                        x_hr  += image_subpixel_scale;
                        fg_ptr = (value_type*)base_type::source().next_x();
                    }

                    if(--y_count == 0) break;
                    y_hr  += image_subpixel_scale;
                    fg_ptr = (value_type*)base_type::source().next_y();
                }

                fg >>= image_filter_shift;
                if(fg < 0) fg = 0;
                if(fg > base_mask) fg = base_mask;
                span->v = (value_type)fg;
                span->a = base_mask;

                ++span;
                ++base_type::interpolator();

            } while(--len);
        }
        //--------------------------------------------------------------------
        public void generate(color_type* span, int x, int y, unsigned len)
        {
            base_type::interpolator().begin(x + base_type::filter_dx_dbl(), 
                                            y + base_type::filter_dy_dbl(), len);

            calc_type fg;

            value_type *fg_ptr;
            int16* weight_array = base_type::filter().weight_array() + 
                                        ((base_type::filter().diameter()/2 - 1) << 
                                          image_subpixel_shift);
            do
            {
                int x_hr;
                int y_hr;

                base_type::interpolator().coordinates(&x_hr, &y_hr);

                x_hr -= base_type::filter_dx_int();
                y_hr -= base_type::filter_dy_int();

                int x_lr = x_hr >> image_subpixel_shift;
                int y_lr = y_hr >> image_subpixel_shift;

                unsigned weight;
                fg = image_filter_scale / 2;

                x_hr &= image_subpixel_mask;
                y_hr &= image_subpixel_mask;

                fg_ptr = (value_type*)base_type::source().span(x_lr, y_lr, 2);
                weight = (weight_array[x_hr + image_subpixel_scale] * 
                          weight_array[y_hr + image_subpixel_scale] + 
                          image_filter_scale / 2) >> 
                          image_filter_shift;
                fg += weight * *fg_ptr;

                fg_ptr = (value_type*)base_type::source().next_x();
                weight = (weight_array[x_hr] * 
                          weight_array[y_hr + image_subpixel_scale] + 
                          image_filter_scale / 2) >> 
                          image_filter_shift;
                fg += weight * *fg_ptr;

                fg_ptr = (value_type*)base_type::source().next_y();
                weight = (weight_array[x_hr + image_subpixel_scale] * 
                          weight_array[y_hr] + 
                          image_filter_scale / 2) >> 
                          image_filter_shift;
                fg += weight * *fg_ptr;

                fg_ptr = (value_type*)base_type::source().next_x();
                weight = (weight_array[x_hr] * 
                          weight_array[y_hr] + 
                          image_filter_scale / 2) >> 
                          image_filter_shift;
                fg += weight * *fg_ptr;

                fg >>= image_filter_shift;
                if(fg > base_mask) fg = base_mask;

                span->v = (value_type)fg;
                span->a = base_mask;
                ++span;
                ++base_type::interpolator();
            } while(--len);
        }
        //--------------------------------------------------------------------
        public void generate(color_type* span, int x, int y, unsigned len)
        {
            base_type::interpolator().begin(x + base_type::filter_dx_dbl(), 
                                            y + base_type::filter_dy_dbl(), len);
            calc_type fg;
            calc_type src_alpha;
            value_type back_v = m_back_color.v;
            value_type back_a = m_back_color.a;

            value_type *fg_ptr;

            int maxx = base_type::source().width() - 1;
            int maxy = base_type::source().height() - 1;

            do
            {
                int x_hr;
                int y_hr;
                
                base_type::interpolator().coordinates(&x_hr, &y_hr);

                x_hr -= base_type::filter_dx_int();
                y_hr -= base_type::filter_dy_int();

                int x_lr = x_hr >> image_subpixel_shift;
                int y_lr = y_hr >> image_subpixel_shift;

                if(x_lr >= 0    && y_lr >= 0 &&
                   x_lr <  maxx && y_lr <  maxy) 
                {
                    fg = image_subpixel_scale * image_subpixel_scale / 2;

                    x_hr &= image_subpixel_mask;
                    y_hr &= image_subpixel_mask;
                    fg_ptr = (value_type*)base_type::source().row_ptr(y_lr) + x_lr;

                    fg += *fg_ptr++ * (image_subpixel_scale - x_hr) * (image_subpixel_scale - y_hr);
                    fg += *fg_ptr++ * (image_subpixel_scale - y_hr) * x_hr;

                    ++y_lr;
                    fg_ptr = (value_type*)base_type::source().row_ptr(y_lr) + x_lr;

                    fg += *fg_ptr++ * (image_subpixel_scale - x_hr) * y_hr;
                    fg += *fg_ptr++ * x_hr * y_hr;

                    fg >>= image_subpixel_shift * 2;
                    src_alpha = base_mask;
                }
                else
                {
                    unsigned weight;
                    if(x_lr < -1   || y_lr < -1 ||
                       x_lr > maxx || y_lr > maxy)
                    {
                        fg        = back_v;
                        src_alpha = back_a;
                    }
                    else
                    {
                        fg = 
                        src_alpha = image_subpixel_scale * image_subpixel_scale / 2;

                        x_hr &= image_subpixel_mask;
                        y_hr &= image_subpixel_mask;

                        weight = (image_subpixel_scale - x_hr) * 
                                 (image_subpixel_scale - y_hr);
                        if(x_lr >= 0    && y_lr >= 0 &&
                           x_lr <= maxx && y_lr <= maxy)
                        {
                            fg += weight * 
                                *((value_type*)base_type::source().row_ptr(y_lr) + x_lr);
                            src_alpha += weight * base_mask;
                        }
                        else
                        {
                            fg        += back_v * weight;
                            src_alpha += back_a * weight;
                        }

                        x_lr++;

                        weight = x_hr * (image_subpixel_scale - y_hr);
                        if(x_lr >= 0    && y_lr >= 0 &&
                           x_lr <= maxx && y_lr <= maxy)
                        {
                            fg += weight * 
                                *((value_type*)base_type::source().row_ptr(y_lr) + x_lr);
                            src_alpha += weight * base_mask;
                        }
                        else
                        {
                            fg        += back_v * weight;
                            src_alpha += back_a * weight;
                        }

                        x_lr--;
                        y_lr++;

                        weight = (image_subpixel_scale - x_hr) * y_hr;
                        if(x_lr >= 0    && y_lr >= 0 &&
                           x_lr <= maxx && y_lr <= maxy)
                        {
                            fg += weight * 
                                *((value_type*)base_type::source().row_ptr(y_lr) + x_lr);
                            src_alpha += weight * base_mask;
                        }
                        else
                        {
                            fg        += back_v * weight;
                            src_alpha += back_a * weight;
                        }

                        x_lr++;

                        weight = x_hr * y_hr;
                        if(x_lr >= 0    && y_lr >= 0 &&
                           x_lr <= maxx && y_lr <= maxy)
                        {
                            fg += weight * 
                                *((value_type*)base_type::source().row_ptr(y_lr) + x_lr);
                            src_alpha += weight * base_mask;
                        }
                        else
                        {
                            fg        += back_v * weight;
                            src_alpha += back_a * weight;
                        }

                        fg        >>= image_subpixel_shift * 2;
                        src_alpha >>= image_subpixel_shift * 2;
                    }
                }

                span->v = (value_type)fg;
                span->a = (value_type)src_alpha;
                ++span;
                ++base_type::interpolator();

            } while(--len);
        }
 public void background_color(color_type v)   { m_back_color = v; }
 public span_image_filter_gray_bilinear_clip(source_type src, 
                                      color_type back_color,
                                      interpolator_type inter) :
     base(src, inter, 0)
 {
     m_back_color = (back_color);
 }
        //--------------------------------------------------------------------
        public void generate(color_type* span, int x, int y, unsigned len)
        {
            base_type::interpolator().begin(x + base_type::filter_dx_dbl(), 
                                            y + base_type::filter_dy_dbl(), len);
            calc_type fg;
            value_type *fg_ptr;
            do
            {
                int x_hr;
                int y_hr;

                base_type::interpolator().coordinates(&x_hr, &y_hr);

                x_hr -= base_type::filter_dx_int();
                y_hr -= base_type::filter_dy_int();

                int x_lr = x_hr >> image_subpixel_shift;
                int y_lr = y_hr >> image_subpixel_shift;

                fg = image_subpixel_scale * image_subpixel_scale / 2;

                x_hr &= image_subpixel_mask;
                y_hr &= image_subpixel_mask;

                fg_ptr = (value_type*)base_type::source().span(x_lr, y_lr, 2);
                fg    += *fg_ptr * (image_subpixel_scale - x_hr) * (image_subpixel_scale - y_hr);

                fg_ptr = (value_type*)base_type::source().next_x();
                fg    += *fg_ptr * x_hr * (image_subpixel_scale - y_hr);

                fg_ptr = (value_type*)base_type::source().next_y();
                fg    += *fg_ptr * (image_subpixel_scale - x_hr) * y_hr;

                fg_ptr = (value_type*)base_type::source().next_x();
                fg    += *fg_ptr * x_hr * y_hr;

                span->v = value_type(fg >> (image_subpixel_shift * 2));
                span->a = base_mask;
                ++span;
                ++base_type::interpolator();

            } while(--len);
        }
 public void background_color(color_type v)
 {
     m_back_color = v;
 }
示例#13
0
        /*-------------------------------------------------------------------------
         *
         * ---------------------------------------------------------------------------*/
        public sea_area(gvt_lib lib, string fname)
        {
            m_lib = lib;

            m_angle      = 0;
            m_angle2     = 0;
            m_color_type = color_type.type1;
            m_groups     = new List <sea_area_once>();

            m_progress_max      = 0;
            m_progress_current  = 0;
            m_progress_info_str = "";
            m_is_loaded_mask    = false;

            sea_area_once once;

            // カリブ海
            once = new sea_area_once("カリブ海");
            once.Add("サンフアン沖", new Vector2(3970, 1049), new Vector2(73, 149), true);
            once.Add("アンティル諸島沖", new Vector2(3819, 1049), new Vector2(150, 149), true);
            once.Add("中央大西洋", new Vector2(4044, 1199), new Vector2(373, 148), false);
            once.Add("西カリブ海", new Vector2(3670, 1049), new Vector2(148, 136), true);
            once.Add("", new Vector2(3753, 1185), new Vector2(65, 124), true);

            once.Add("コッド岬沖", new Vector2(3819, 750), new Vector2(224, 148), true);
            once.Add("バミューダ諸島沖", new Vector2(3717, 899), new Vector2(326, 149), true);
            once.Add("テラ・ノヴァ海", new Vector2(3790 - 1, 600), new Vector2(254, 149), true);
            m_groups.Add(once);

            // アフリカ西岸
            once = new sea_area_once("アフリカ西岸");
            once.Add("穀物海岸沖", new Vector2(4418, 1199), new Vector2(224, 299), true);
            once.Add("黄金海岸沖", new Vector2(4643, 1325), new Vector2(149, 173), true);
            once.Add("ギニア湾", new Vector2(1, 1322), new Vector2(164, 176), true);
            m_groups.Add(once);

            // 南大西洋
            once = new sea_area_once("南大西洋");
            once.Add("ナミビア沖", new Vector2(1, 1499), new Vector2(180, 149), true);
            once.Add("喜望峰沖", new Vector2(1, 1649), new Vector2(297, 223), true);
            once.Add("ケープ海盆", new Vector2(1, 1873), new Vector2(297, 224), false);
            once.Add("南大西洋", new Vector2(4494, 1499), new Vector2(298, 599), false);
            m_groups.Add(once);

            // アフリカ東岸
            once = new sea_area_once("アフリカ東岸");
            once.Add("アガラス岬沖", new Vector2(299, 1683), new Vector2(149, 189), true);
            once.Add("アガラス海盆", new Vector2(299, 1873), new Vector2(299, 225), false);
            once.Add("モザンビーク海峡", new Vector2(449, 1649), new Vector2(149, 223), true);
            once.Add("マダガスカル沖", new Vector2(458, 1500), new Vector2(440, 149), true);
            once.Add("南西インド洋", new Vector2(599, 1649), new Vector2(299, 449), true);
            m_groups.Add(once);

            // 紅海
            once = new sea_area_once("紅海");
            once.Add("ザンジバル沖", new Vector2(513, 1348), new Vector2(385, 151), true);
            once.Add("アラビア海", new Vector2(600, 1199), new Vector2(298, 149), true);
            once.Add("紅海", new Vector2(457, 1076), new Vector2(142, 202), true);
            once.Add("ペルシャ湾", new Vector2(638, 1086), new Vector2(260, 112), true);
            m_groups.Add(once);

            // インド洋
            once = new sea_area_once("インド洋");
            once.Add("インド西岸沖", new Vector2(899, 1125), new Vector2(109, 149), true);
            once.Add("インド南岸沖", new Vector2(899, 1274), new Vector2(224, 149), true);
            once.Add("ベンガル湾", new Vector2(1067, 1134), new Vector2(272, 139), true);
            once.Add("中部インド洋", new Vector2(899, 1424), new Vector2(449, 224), true);
            once.Add("南インド洋", new Vector2(899, 1649), new Vector2(301, 449), false);
            once.Add("南東インド洋", new Vector2(1201, 1649), new Vector2(296, 449), false);
            m_groups.Add(once);

            // 中南米東岸
            once = new sea_area_once("中南米東岸");
            once.Add("南カリブ海", new Vector2(3819, 1199), new Vector2(224, 148), true);
            once.Add("メキシコ湾", new Vector2(3497, 1055), new Vector2(173, 132), true);
            once.Add("サンロケ岬沖", new Vector2(4194, 1348), new Vector2(223, 150), true);
            once.Add("アマゾン川流域", new Vector2(3900, 1348), new Vector2(293, 117), true);
            once.Add("南西大西洋", new Vector2(4194, 1499), new Vector2(299, 373), true);
            once.Add("ブエノスアイレス沖", new Vector2(3946, 1678), new Vector2(248, 195), true);
            once.Add("アルゼンチン海盆", new Vector2(3894, 1873), new Vector2(374, 225), true);
            once.Add("ジョージア海盆", new Vector2(4269, 1873), new Vector2(224, 225), false);
            m_groups.Add(once);

            // 東南アジア
            once = new sea_area_once("東南アジア");
            once.Add("アンダマン海", new Vector2(1124, 1274), new Vector2(224, 149), true);
            once.Add("ジャワ海", new Vector2(1349, 1348), new Vector2(224, 150), true);
            once.Add("ジャワ島南方沖", new Vector2(1349, 1500), new Vector2(224, 73), false);
            once.Add("", new Vector2(1349, 1572), new Vector2(148, 76), false);
            once.Add("シャム湾", new Vector2(1349, 1199), new Vector2(149, 148), true);
            once.Add("バンダ海", new Vector2(1574, 1423), new Vector2(298, 150), true);
            once.Add("セレベス海", new Vector2(1499, 1199), new Vector2(223, 148), true);
            once.Add("", new Vector2(1574, 1347), new Vector2(148, 76), true);
            once.Add("西カロリン海盆", new Vector2(1723, 1199), new Vector2(149, 223), true);
            m_groups.Add(once);

            // 南太平洋
            once = new sea_area_once("南太平洋");
            once.Add("チリ海盆", new Vector2(3595, 1797), new Vector2(299, 301), true);
            once.Add("西オーストラリア海盆", new Vector2(1498, 1573), new Vector2(224, 224), true);
            once.Add("パース海盆", new Vector2(1498, 1798), new Vector2(224, 300), true);
            once.Add("南オーストラリア海盆", new Vector2(1723, 1893), new Vector2(299, 205), true);
            once.Add("アラフラ海", new Vector2(1723, 1573), new Vector2(373, 211), true);
            once.Add("", new Vector2(1873, 1497), new Vector2(223, 76), true);
            once.Add("東カロリン海盆", new Vector2(1873, 1199), new Vector2(223, 297), true);
            once.Add("メラネシア海盆", new Vector2(2097, 1199), new Vector2(223, 298), false);
            once.Add("コーラル海", new Vector2(2097, 1498), new Vector2(299, 299), true);
            once.Add("タスマン海", new Vector2(2023, 1798), new Vector2(448, 300), true);
            once.Add("中央太平洋海盆西", new Vector2(2321, 1199), new Vector2(373, 298), false);
            once.Add("サモア海盆", new Vector2(2397, 1498), new Vector2(224, 299), true);
            once.Add("南太平洋海盆西", new Vector2(2472, 1798), new Vector2(298, 300), false);
            once.Add("中央太平洋海盆", new Vector2(2695, 1199), new Vector2(449, 298), false);
            once.Add("南太平洋海盆北", new Vector2(2622, 1498), new Vector2(523, 299), false);
            once.Add("南太平洋海盆", new Vector2(2771, 1798), new Vector2(374, 300), false);
            once.Add("南太平洋海盆東", new Vector2(3146, 1498), new Vector2(448, 600), false);
            once.Add("ハワイ沖", new Vector2(2321, 751), new Vector2(449, 447), true);
            m_groups.Add(once);

            // 中南米西岸
            once = new sea_area_once("中南米西岸");
            once.Add("ペルー海盆", new Vector2(3595, 1498), new Vector2(260, 298), true);
            once.Add("グアヤキル湾", new Vector2(3595, 1350), new Vector2(126, 147), true);
            once.Add("パナマ湾", new Vector2(3595, 1234), new Vector2(136, 114), true);
            once.Add("中央太平洋海盆東", new Vector2(3145, 1199), new Vector2(299, 298), true);
            once.Add("ガラパゴス諸島沖", new Vector2(3445, 1350), new Vector2(149, 147), true);
            once.Add("テワンテペク湾", new Vector2(3445, 1234), new Vector2(149, 114), true);
            m_groups.Add(once);

            // 東アジア
            once = new sea_area_once("東アジア");
            once.Add("東アジア西部", new Vector2(1393, 912), new Vector2(254, 286), true);
            once.Add("東アジア東部", new Vector2(1649, 751), new Vector2(373, 447), true);
            once.Add("北西太平洋海盆", new Vector2(2024, 751), new Vector2(297, 447), true);
            m_groups.Add(once);

            // 極北大西洋
            once = new sea_area_once("極北大西洋");
            once.Add("フラム海峡", new Vector2(4344, 0), new Vector2(224, 294), true);
            once.Add("デンマーク海盆", new Vector2(4344, 295), new Vector2(224, 155), false);
            once.Add("ロフォーテン海盆", new Vector2(4569, 0), new Vector2(223, 294), true);
            once.Add("ノルウェー海盆", new Vector2(4569, 295), new Vector2(224, 155), false);
            once.Add("ノルウェー海盆2", new Vector2(0, 295), new Vector2(74, 155), false);
            m_groups.Add(once);

            // ヨーロッパ極北
            once = new sea_area_once("ヨーロッパ極北");
            once.Add("西バレンツ海", new Vector2(1, 0), new Vector2(447, 294), true);
            once.Add("北ノルウェー海", new Vector2(75, 295), new Vector2(300, 155), true);
            once.Add("東バレンツ海", new Vector2(449, 0), new Vector2(304, 294), true);
            once.Add("東バレンツ海2", new Vector2(601, 294), new Vector2(152, 156), true);
            once.Add("白海", new Vector2(376, 295), new Vector2(223, 225), true);
            m_groups.Add(once);

            // ユーラシア北
            once = new sea_area_once("ユーラシア北");
            once.Add("西カラ海", new Vector2(754, 0), new Vector2(369, 450), true);
            once.Add("東カラ海", new Vector2(1124, 0), new Vector2(294, 450), true);
            once.Add("ラプテフ海", new Vector2(1419, 0), new Vector2(298, 450), true);
            m_groups.Add(once);

            // ユーラシア極東
            once = new sea_area_once("ユーラシア極東");
            once.Add("コテリヌイ島沖", new Vector2(1718, 0), new Vector2(304, 450), true);
            once.Add("東シベリア海", new Vector2(2023, 0), new Vector2(373, 450), true);
            once.Add("チュクチ海", new Vector2(2397, 0), new Vector2(297, 450), true);
            m_groups.Add(once);

            // ベーリング海
            once = new sea_area_once("ベーリング海");
            once.Add("東ベーリング海", new Vector2(2472, 451), new Vector2(222, 298), true);
            once.Add("西ベーリング海", new Vector2(2246, 451), new Vector2(225, 298), true);
            once.Add("カムチャツカ半島沖", new Vector2(2023, 451), new Vector2(222, 298), true);
            once.Add("オホーツク海", new Vector2(1648, 451), new Vector2(374, 298), true);
            m_groups.Add(once);

            // 北米西岸
            once = new sea_area_once("北米西岸");
            once.Add("アレキサンダー諸島沖", new Vector2(2994, 451), new Vector2(223, 447), true);
            once.Add("北東太平洋", new Vector2(2770, 750), new Vector2(223, 448), false);
            once.Add("アラスカ湾", new Vector2(2695, 451), new Vector2(298, 298), true);
            once.Add("カリフォルニア湾", new Vector2(3218, 899), new Vector2(254, 299), true);
            once.Add("サンフランシスコ沖", new Vector2(2994, 899), new Vector2(223, 299), true);
            m_groups.Add(once);

            // 東カナダ
            once = new sea_area_once("東カナダ");
            once.Add("ハドソン海峡", new Vector2(3746, 451), new Vector2(148, 148), true);
            once.Add("ハドソン湾", new Vector2(3595, 451), new Vector2(150, 298), true);
            once.Add("バフィン湾", new Vector2(3895, 295), new Vector2(147, 155), false);
            once.Add("バフィン島沖", new Vector2(3595, 295), new Vector2(299, 155), true);
            once.Add("エルズミーア島沖", new Vector2(3595, 0), new Vector2(447, 294), true);
            m_groups.Add(once);

            // 西カナダ
            once = new sea_area_once("西カナダ");
            once.Add("北極諸島沖", new Vector2(3218, 0), new Vector2(376, 450), true);
            once.Add("ボーフォート海", new Vector2(2994, 0), new Vector2(223, 450), true);
            once.Add("バロー岬沖", new Vector2(2695, 0), new Vector2(298, 450), true);
            m_groups.Add(once);

            // 読み込み
            load(fname);
        }