From: Bborie Park Date: Fri, 10 May 2013 22:27:44 +0000 (+0000) Subject: Added more predefined color ramps for ST_ColorMap(raster). Removed RGB X-Git-Tag: 2.1.0beta2~17 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c7c613a38e687cc5fc45a923626222b18f57fa49;p=postgis Added more predefined color ramps for ST_ColorMap(raster). Removed RGB <-> 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 --- diff --git a/NEWS b/NEWS index 9ef976c10..62060686b 100644 --- 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 diff --git a/doc/reference_raster.xml b/doc/reference_raster.xml index 6384f417c..f674c52f5 100644 --- a/doc/reference_raster.xml +++ b/doc/reference_raster.xml @@ -10819,12 +10819,22 @@ UPDATE wind - grayscale, greyscale for a one 8BUI band raster + grayscale or greyscale for a one 8BUI band raster of shades of gray. - pseudocolor for a four 8BUI (RGBA) band raster + pseudocolor for a four 8BUI (RGBA) band raster with colors going from blue to green to red. + + + + + fire for a four 8BUI (RGBA) band raster with colors going from black to red to pale yellow. + + + + + bluered for a four 8BUI (RGBA) band raster with colors going from blue to pale white to red. diff --git a/raster/rt_core/rt_api.c b/raster/rt_core/rt_api.c index cb2fb8d6b..6d6787d37 100644 --- a/raster/rt_core/rt_api.c +++ b/raster/rt_core/rt_api.c @@ -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); diff --git a/raster/rt_pg/rt_pg.c b/raster/rt_pg/rt_pg.c index fea5ee928..e3e17b5a2 100644 --- a/raster/rt_pg/rt_pg.c +++ b/raster/rt_pg/rt_pg.c @@ -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; } diff --git a/raster/rt_pg/rtpostgis.sql.in b/raster/rt_pg/rtpostgis.sql.in index c53a656e9..8b81f7b07 100644 --- a/raster/rt_pg/rtpostgis.sql.in +++ b/raster/rt_pg/rtpostgis.sql.in @@ -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; diff --git a/raster/test/regress/rt_colormap_expected b/raster/test/regress/rt_colormap_expected index 447c1f9a6..38e977464 100644 --- a/raster/test/regress/rt_colormap_expected +++ b/raster/test/regress/rt_colormap_expected @@ -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}}