]> granicus.if.org Git - postgis/commitdiff
Added more predefined color ramps for ST_ColorMap(raster). Removed RGB
authorBborie Park <bkpark at ucdavis.edu>
Fri, 10 May 2013 22:27:44 +0000 (22:27 +0000)
committerBborie Park <bkpark at ucdavis.edu>
Fri, 10 May 2013 22:27:44 +0000 (22:27 +0000)
<-> HSV colorspace conversion as it sometimes resulted in strange
answers when interpolating.

git-svn-id: http://svn.osgeo.org/postgis/trunk@11411 b70326c6-7e19-0410-871a-916f4a2858ee

NEWS
doc/reference_raster.xml
raster/rt_core/rt_api.c
raster/rt_pg/rt_pg.c
raster/rt_pg/rtpostgis.sql.in
raster/test/regress/rt_colormap_expected

diff --git a/NEWS b/NEWS
index 9ef976c1047a8af0215cef52b8f60e7ef7b6ff1f..62060686b494dc564aaf042275f12435b32b1fe7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -199,7 +199,8 @@ PostGIS 2.1.0
   - #2133, Fix performance regression in expression variant of ST_MapAlgebra
   - #2257, GBOX variables not initialized when testing with empty geometries
   - #2271, Prevent parallel make of raster
-  - #2282, Fix call to undefined function nd_stats_to_grid()
+  - #2282, Fix call to undefined function nd_stats_to_grid() in debug mode
+  - #2309, Remove confusing INFO message when trying to get SRS info
 
 PostGIS 2.0.3
 2013/03/01
index 6384f417cdd8a53c0764bfb823bb852e63635d6e..f674c52f5e080c48f985bf601f5f59047ee2646c 100644 (file)
@@ -10819,12 +10819,22 @@ UPDATE wind
                                <itemizedlist>
                                        <listitem>
                                                <para>
-                                                       <varname>grayscale</varname>, <varname>greyscale</varname> for a one 8BUI band raster
+                                                       <varname>grayscale</varname> or <varname>greyscale</varname> for a one 8BUI band raster of shades of gray.
                                                </para>
                                        </listitem>
                                        <listitem>
                                                <para>
-                                                       <varname>pseudocolor</varname> for a four 8BUI (RGBA) band raster
+                                                       <varname>pseudocolor</varname> for a four 8BUI (RGBA) band raster with colors going from blue to green to red.
+                                               </para>
+                                       </listitem>
+                                       <listitem>
+                                               <para>
+                                                       <varname>fire</varname> for a four 8BUI (RGBA) band raster with colors going from black to red to pale yellow.
+                                               </para>
+                                       </listitem>
+                                       <listitem>
+                                               <para>
+                                                       <varname>bluered</varname> for a four 8BUI (RGBA) band raster with colors going from blue to pale white to red.
                                                </para>
                                        </listitem>
                                </itemizedlist>
index cb2fb8d6bd13e53c3258382ea8dd83b9bc06d3aa..6d6787d37a93bd9329f860b85e490568207132be 100644 (file)
@@ -14823,13 +14823,7 @@ rt_errorstate rt_raster_get_perimeter(
 * rt_raster_colormap()
 ******************************************************************************/
 
-typedef struct _rti_colormap_rgbhsv_t* _rti_colormap_rgbhsv;
 typedef struct _rti_colormap_arg_t* _rti_colormap_arg;
-struct _rti_colormap_rgbhsv_t {
-       double rgb[3];
-       double hsv[3];
-};
-
 struct _rti_colormap_arg_t {
        rt_raster raster;
        rt_band band;
@@ -14844,9 +14838,6 @@ struct _rti_colormap_arg_t {
        int npos;
        uint16_t *pos;
 
-       int nrgbhsv;
-       _rti_colormap_rgbhsv rgbhsv;
-
 };
 
 static _rti_colormap_arg
@@ -14881,9 +14872,6 @@ _rti_colormap_arg_init(rt_raster raster) {
        arg->npos = 0;
        arg->pos = NULL;
 
-       arg->nrgbhsv = 0;
-       arg->rgbhsv = NULL;
-
        return arg;
 }
 
@@ -14914,9 +14902,6 @@ _rti_colormap_arg_destroy(_rti_colormap_arg arg) {
        if (arg->npos)
                rtdealloc(arg->pos);
 
-       if (arg->rgbhsv != NULL)
-               rtdealloc(arg->rgbhsv);
-
        rtdealloc(arg);
        arg = NULL;
 }
@@ -15058,35 +15043,6 @@ rt_raster rt_raster_colormap(
                }
        }
 
-       /* rgb to hsv */
-       if (colormap->method == CM_INTERPOLATE && colormap->ncolor > 2) {
-               arg->nrgbhsv = arg->npos;
-               if (arg->nodataentry != NULL)
-                       arg->nrgbhsv += 1;
-
-               /* allocate space */
-               arg->rgbhsv = rtalloc(sizeof(struct _rti_colormap_rgbhsv_t) * arg->nrgbhsv);
-               if (arg->rgbhsv == NULL) {
-                       rterror("rt_raster_colormap: Unable to allocate memory for RGB to HSV conversion");
-                       _rti_colormap_arg_destroy(arg);
-                       return NULL;
-               }
-               memset(arg->rgbhsv, 0, sizeof(struct _rti_colormap_rgbhsv_t) * arg->nrgbhsv);
-
-               for (i = 0; i < arg->nrgbhsv; i++) {
-                       /* convert colormap's 0 - 255 to 0 - 1 */
-                       for (j = 0; j < 3; j++) {
-                               if (i < arg->npos)
-                                       arg->rgbhsv[i].rgb[j] = ((double) colormap->entry[arg->pos[i]].color[j]) / 255.;
-                               else
-                                       arg->rgbhsv[i].rgb[j] = ((double) arg->nodataentry->color[j]) / 255.;
-                       }
-                       
-                       /* convert to hsv */
-                       rt_util_rgb_to_hsv(arg->rgbhsv[i].rgb, arg->rgbhsv[i].hsv);
-               }
-       }
-
        /* reclassify bands */
        /* by # of colors */
        for (i = 0; i < colormap->ncolor; i++) {
@@ -15101,16 +15057,8 @@ rt_raster rt_raster_colormap(
                        arg->expr[k]->src.exc_min = 0;
                        arg->expr[k]->src.exc_max = 0;
 
-                       /* use HSV */
-                       if (arg->nrgbhsv && i < 3) {
-                               arg->expr[k]->dst.min = arg->rgbhsv[arg->nrgbhsv - 1].hsv[i];
-                               arg->expr[k]->dst.max = arg->rgbhsv[arg->nrgbhsv - 1].hsv[i];
-                       }
-                       /* use RGB */
-                       else {
-                               arg->expr[k]->dst.min = arg->nodataentry->color[i];
-                               arg->expr[k]->dst.max = arg->nodataentry->color[i];
-                       }
+                       arg->expr[k]->dst.min = arg->nodataentry->color[i];
+                       arg->expr[k]->dst.max = arg->nodataentry->color[i];
 
                        arg->expr[k]->dst.inc_min = 1;
                        arg->expr[k]->dst.inc_max = 1;
@@ -15153,16 +15101,8 @@ rt_raster rt_raster_colormap(
                                arg->expr[k]->src.inc_max = 1;
                                arg->expr[k]->src.exc_max = 0;
 
-                               /* use HSV */
-                               if (arg->nrgbhsv && i < 3) {
-                                       arg->expr[k]->dst.min = arg->rgbhsv[j + 1].hsv[i];
-                                       arg->expr[k]->dst.max = arg->rgbhsv[j].hsv[i];
-                               }
-                               /* use RGB */
-                               else {
-                                       arg->expr[k]->dst.min = colormap->entry[arg->pos[j + 1]].color[i];
-                                       arg->expr[k]->dst.max = colormap->entry[arg->pos[j]].color[i];
-                               }
+                               arg->expr[k]->dst.min = colormap->entry[arg->pos[j + 1]].color[i];
+                               arg->expr[k]->dst.max = colormap->entry[arg->pos[j]].color[i];
 
                                arg->expr[k]->dst.inc_min = 1;
                                arg->expr[k]->dst.exc_min = 0;
@@ -15289,10 +15229,7 @@ rt_raster rt_raster_colormap(
                }
 
                /* call rt_band_reclass */
-               if (arg->nrgbhsv)
-                       arg->band = rt_band_reclass(band, PT_32BF, 0, 0, arg->expr, arg->nexpr);
-               else
-                       arg->band = rt_band_reclass(band, PT_8BUI, 0, 0, arg->expr, arg->nexpr);
+               arg->band = rt_band_reclass(band, PT_8BUI, 0, 0, arg->expr, arg->nexpr);
                if (arg->band == NULL) {
                        rterror("rt_raster_colormap: Unable to reclassify band");
                        _rti_colormap_arg_destroy(arg);
@@ -15307,93 +15244,6 @@ rt_raster rt_raster_colormap(
                }
        }
 
-       /* convert HSV back to RGB 0 - 255 */
-       if (arg->nrgbhsv) {
-               int width = rt_raster_get_width(arg->raster);
-               int height = rt_raster_get_height(arg->raster);
-               rt_band _band = NULL;
-               rt_band band[6];
-               struct _rti_colormap_rgbhsv_t hsvrgb;
-
-               /* get band objects */
-               for (i = 0; i < 6; i++) {
-                       /* existing band */
-                       if (i < 3)
-                               band[i] = rt_raster_get_band(arg->raster, i);
-                       /* new band */
-                       else {
-                               void *mem =rtalloc(rt_pixtype_size(PT_8BUI) * width * height);
-                               if (mem == NULL) {
-                                       rterror("rt_raster_colormap: Unable to allocate memory for new band");
-                                       for (j = 3; j < i; j++)
-                                               rt_band_destroy(band[j]);
-                                       _rti_colormap_arg_destroy(arg);
-                                       return NULL;
-                               }
-                               memset(mem, 0, rt_pixtype_size(PT_8BUI) * width * height);
-
-                               band[i] = rt_band_new_inline(
-                                       width, height,
-                                       PT_8BUI,
-                                       0, 0,
-                                       mem
-                               );
-                               if (band[i] == NULL) {
-                                       rterror("rt_raster_colormap: Unable to create new band");
-                                       rtdealloc(mem);
-                                       for (j = 3; j < i; j++)
-                                               rt_band_destroy(band[j]);
-                                       _rti_colormap_arg_destroy(arg);
-                                       return NULL;
-                               }
-                               rt_band_set_ownsdata_flag(band[i], 1);
-                       }
-               }
-
-               /* process each pixel */
-               for (i = 0; i < height; i++) {
-                       for (j = 0; j < width; j++) {
-                               /* get HSV components */
-                               for (k = 0; k < 3; k++) {
-                                       if (rt_band_get_pixel(band[k], j, i, &(hsvrgb.hsv[k]), NULL) != ES_NONE) {
-                                               rterror("rt_raster_colormap: Unable to process HSV values from bands");
-                                               for (i = 3; i < 6; i++)
-                                                       rt_band_destroy(band[j]);
-                                               _rti_colormap_arg_destroy(arg);
-                                               return NULL;
-                                       }
-                               }
-
-                               /* convert HSV to RGB 0 - 1 */
-                               rt_util_hsv_to_rgb(hsvrgb.hsv, hsvrgb.rgb);
-
-                               /* convert RGB 0 - 1 to 0 - 255 and burn */
-                               for (k = 0; k < 3; k++) {
-                                       if (rt_band_set_pixel(band[k + 3], j, i, ROUND(hsvrgb.rgb[k] * 255., 0), NULL) != ES_NONE) {
-                                               rterror("rt_raster_colormap: Unable to set RGB values to bands");
-                                               for (i = 3; i < 6; i++)
-                                                       rt_band_destroy(band[j]);
-                                               _rti_colormap_arg_destroy(arg);
-                                               return NULL;
-                                       }
-                               }
-                       }
-               }
-
-               /* replace bands */
-               for (i = 0; i < 3; i++) {
-                       _band = rt_raster_replace_band(arg->raster, band[i + 3], i);
-                       if (_band == NULL) {
-                               rterror("rt_raster_colormap: Unable to replace HSV band with RGB band");
-                               for (j = i + 3; j < 6; j++)
-                                       rt_band_destroy(band[j]);
-                               _rti_colormap_arg_destroy(arg);
-                               return NULL;
-                       }
-                       rt_band_destroy(_band);
-               }
-       }
-
        rtnraster = arg->raster;
        arg->raster = NULL;
        _rti_colormap_arg_destroy(arg);
index fea5ee9282fcbebc283d6fcd6dd4dff55a048980..e3e17b5a21e2fc0ea208c7783cceb334d4f564fe 100644 (file)
@@ -10989,6 +10989,7 @@ Datum RASTER_colorMap(PG_FUNCTION_ARGS)
 
                        /* empty entry, continue */
                        if (!strlen(_entry)) {
+                               POSTGIS_RT_DEBUGF(3, "Skipping empty entry[%d]", i);
                                pfree(_entry);
                                continue;
                        }
index c53a656e96ff751d4baed827cb5beea9e57c20ee..8b81f7b076f705f5ef772fe03bf363efd70b2a75 100644 (file)
@@ -1626,17 +1626,60 @@ CREATE OR REPLACE FUNCTION st_colormap(
                        method := 'INTERPOLATE';
                        CASE lower(trim(both from _colormap))
                                WHEN 'grayscale', 'greyscale' THEN
-                                       _colormap = '
-                                       100%   0
-                                         0% 254
-                                         nv 255 
+                                       _colormap := '
+100%   0
+  0% 254
+  nv 255 
                                        ';
                                WHEN 'pseudocolor' THEN
-                                       _colormap = '
-                                       100% 255   0   0 255
-                                        50%   0 255   0 255
-                                         0%   0   0 255 255
-                                               nv   0   0   0   0
+                                       _colormap := '
+100% 255   0   0 255
+ 50%   0 255   0 255
+  0%   0   0 255 255
+  nv   0   0   0   0
+                                       ';
+                               WHEN 'fire' THEN
+                                       _colormap := '
+  100% 243 255 221 255
+93.75% 242 255 178 255
+ 87.5% 255 255 135 255
+81.25% 255 228  96 255
+   75% 255 187  53 255
+68.75% 255 131   7 255
+ 62.5% 255  84   0 255
+56.25% 255  42   0 255
+   50% 255   0   0 255
+43.75% 255  42   0 255
+ 37.5% 224  74   0 255
+31.25% 183  91   0 255
+   25% 140  93   0 255
+18.75%  99  82   0 255
+ 12.5%  58  58   1 255
+ 6.25%  12  15   0 255
+    0%   0   0   0 255
+    nv   0   0   0   0
+                                       ';
+                               WHEN 'bluered' THEN
+                                       _colormap := '
+100.00% 165   0  33 255
+ 94.12% 216  21  47 255
+ 88.24% 247  39  53 255
+ 82.35% 255  61  61 255
+ 76.47% 255 120  86 255
+ 70.59% 255 172 117 255
+ 64.71% 255 214 153 255
+ 58.82% 255 241 188 255
+ 52.94% 255 255 234 255
+ 47.06% 234 255 255 255
+ 41.18% 188 249 255 255
+ 35.29% 153 234 255 255
+ 29.41% 117 211 255 255
+ 23.53%  86 176 255 255
+ 17.65%  61 135 255 255
+ 11.76%  40  87 255 255
+  5.88%  24  28 247 255
+  0.00%  36   0 216 255
+     nv   0   0   0   0
                                        ';
                                ELSE
                                        RAISE EXCEPTION 'Unknown colormap keyword: %', colormap;
index 447c1f9a628ddab3b8b3ef183e64ba32dd1bf125..38e977464151190ebffc89b6355c54f1aefeff5e 100644 (file)
@@ -14,12 +14,12 @@ NOTICE:  Method INTERPOLATE requires at least two non-NODATA colormap entries. U
 1|3|{{0,0,3,5,8,10,13,16,18,21},{23,26,29,31,34,36,39,42,44,47},{49,52,55,57,60,62,65,68,70,73},{75,78,81,83,86,88,91,94,96,99},{101,104,107,109,112,114,117,120,122,125},{128,130,133,135,138,141,143,146,148,151},{154,156,159,161,164,167,169,172,174,177},{180,182,185,187,190,193,195,198,200,203},{206,208,211,213,216,219,221,224,226,229},{232,234,237,239,242,245,247,250,252,255}}
 1|4|{{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255}}
 1|4|{{0,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255}}
-2|1|{{0,0,63,0,127,127,191,127,223,255},{0,0,63,0,127,127,191,127,223,255},{0,0,63,0,127,127,191,127,223,255},{0,0,63,0,127,127,191,127,223,255},{0,0,63,0,127,127,191,127,223,255},{0,0,63,0,127,127,191,127,223,255},{0,0,63,0,127,127,191,127,223,255},{0,0,63,0,127,127,191,127,223,255},{0,0,63,0,127,127,191,127,223,255},{0,0,63,0,127,127,191,127,223,255}}
-2|1|{{0,0,5,10,16,21,26,31,36,41},{47,52,57,62,65,67,67,66,64,61},{56,50,42,33,21,8,8,23,39,54},{70,86,101,117,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,132,137,143,148,153,158,164,169,174},{179,184,190,177,159,141,124,106,89,87},{94,101,108,116,123,130,135,140,145,151},{156,161,166,175,189,203,215,226,235,243},{250,255,255,255,255,255,255,255,255,255}}
-2|2|{{0,0,5,10,14,18,23,27,32,37},{42,48,54,62,67,73,78,83,88,93},{98,104,109,114,119,124,127,127,127,127},{127,127,127,127,122,106,91,75,60,44},{29,13,124,109,93,78,62,47,31,16},{127,24,49,74,101,128,156,43,71,99},{127,155,184,195,200,205,211,216,221,226},{231,237,242,247,252,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,254,250,247,245,244,245,247,250,255}}
-2|2|{{0,0,64,127,64,127,191,255,255,255},{0,0,64,127,64,127,191,255,255,255},{0,0,64,127,64,127,191,255,255,255},{0,0,64,127,64,127,191,255,255,255},{0,0,64,127,64,127,191,255,255,255},{0,0,64,127,64,127,191,255,255,255},{0,0,64,127,64,127,191,255,255,255},{0,0,64,127,64,127,191,255,255,255},{0,0,64,127,64,127,191,255,255,255},{0,0,64,127,64,127,191,255,255,255}}
-2|3|{{0,0,32,0,0,0,48,255,191,255},{0,0,32,0,0,0,48,255,191,255},{0,0,32,0,0,0,48,255,191,255},{0,0,32,0,0,0,48,255,191,255},{0,0,32,0,0,0,48,255,191,255},{0,0,32,0,0,0,48,255,191,255},{0,0,32,0,0,0,48,255,191,255},{0,0,32,0,0,0,48,255,191,255},{0,0,32,0,0,0,48,255,191,255},{0,0,32,0,0,0,48,255,191,255}}
-2|3|{{0,0,5,10,14,17,21,23,26,28},{30,31,31,32,32,31,30,29,27,25},{22,19,16,12,7,3,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,3,6,9,12,16,19,23,27,32},{36,41,46,52,57,63,68,75,81,102},{131,159,187,215,242,247,233,220,208,197},{188,180,173,171,177,182,187,192,198,203},{208,213,218,224,229,234,239,245,250,255}}
+2|1|{{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255}}
+2|1|{{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,3,8,13,18},{23,29,34,39,44,49,54,60,65,70},{75,80,86,91,96,101,106,111,117,122},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,130,135,140,145,151},{156,161,166,171,177,182,187,192,198,203},{208,213,218,224,229,234,239,245,250,255}}
+2|2|{{0,0,5,10,16,21,26,31,36,41},{47,52,57,62,67,73,78,83,88,93},{98,104,109,114,119,124,124,119,114,109},{104,98,93,88,83,78,73,67,62,57},{52,47,41,36,31,26,21,16,10,5},{0,10,21,31,42,52,62,73,83,94},{104,114,125,135,146,156,167,177,187,198},{208,219,229,239,250,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255}}
+2|2|{{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255}}
+2|3|{{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255}}
+2|3|{{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,3,8,13,18},{23,29,34,39,44,49,54,60,65,70},{75,80,86,91,96,101,106,111,117,122},{127,132,137,143,148,153,158,164,169,174},{179,184,190,195,200,205,211,216,221,226},{231,237,242,247,252,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255}}
 2|4|{{0,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255}}
 2|4|{{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255}}
 3|1|{{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}}
@@ -30,7 +30,7 @@ NOTICE:  Method INTERPOLATE requires at least two non-NODATA colormap entries. U
 3|3|{{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}}
 3|4|{{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255}}
 3|4|{{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255}}
-4|1|{{255,255,255,128,0,0,0,0,0,0},{255,255,255,128,0,0,0,0,0,0},{255,255,255,128,0,0,0,0,0,0},{255,255,255,128,0,0,0,0,0,0},{255,255,255,128,0,0,0,0,0,0},{255,255,255,128,0,0,0,0,0,0},{255,255,255,128,0,0,0,0,0,0},{255,255,255,128,0,0,0,0,0,0},{255,255,255,128,0,0,0,0,0,0},{255,255,255,128,0,0,0,0,0,0}}
-4|2|{{0,128,255,255,255,255,255,255,128,0},{0,128,255,255,255,255,255,255,128,0},{0,128,255,255,255,255,255,255,128,0},{0,128,255,255,255,255,255,255,128,0},{0,128,255,255,255,255,255,255,128,0},{0,128,255,255,255,255,255,255,128,0},{0,128,255,255,255,255,255,255,128,0},{0,128,255,255,255,255,255,255,128,0},{0,128,255,255,255,255,255,255,128,0},{0,128,255,255,255,255,255,255,128,0}}
-4|3|{{0,0,0,0,0,0,127,255,255,255},{0,0,0,0,0,0,127,255,255,255},{0,0,0,0,0,0,127,255,255,255},{0,0,0,0,0,0,127,255,255,255},{0,0,0,0,0,0,127,255,255,255},{0,0,0,0,0,0,127,255,255,255},{0,0,0,0,0,0,127,255,255,255},{0,0,0,0,0,0,127,255,255,255},{0,0,0,0,0,0,127,255,255,255},{0,0,0,0,0,0,127,255,255,255}}
+4|1|{{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0}}
+4|2|{{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0}}
+4|3|{{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255}}
 5|1|{{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0}}