栅格调色板(Raster Palette )操作示例

原文发布时间:2010-12-16

作者:毛毛虫

来源:

在处理栅格数据时,主要是对波段(band)或调色板(Palette)两大类的操作,调色板操作不太常用,最近在翻译Raster相关的函数时,也有很多疑惑,翻译了一下From fmepedia网站上的几个例子,包括:提取并把调色板保存到文本中、使用保存的文本修改调色板和直接在Workbench中修改调色板。

 到2009年仲夏(FME2010的发展阶段),还没有很好的工具操作调色板。不过,有时候需要存储和编辑它们。

下面是一个有几种可分辨颜色的简单栅格和在Viewer中的属性:

栅格调色板(Raster Palette )操作示例

栅格调色板(Raster Palette )操作示例

从上图可知,该栅格包含了一个调色板。
使用 RasterPaletteExtractor函数提取调色板后,输出一个调色板属性:

栅格调色板(Raster Palette )操作示例

在文本编辑器中打开这个属性如下:
RGBA32
0 0,0,0,0
1 127,127,127,255
2 25,25,25,255
3 0,0,127,255
4 0,0,255,255
5 0,127,255,255
6 0,255,255,255
7 0,255,0,255
8 127,255,0,255
9 127,255,127,255
10 255,0,255,255
11 255,127,255,255
12 255,0,0,255
13 255,127,0,255
14 255,127,127,255
15 229,229,229,255
第一行告诉我们栅格调色板的解译,在这个例子中,它是RGBA32,其它所有行以键值开始,后面是跟解译相关的颜色表达式,也就是说,前三个数字定义了红、绿和蓝,第四个数字控制α波段,设置透明度。如果想用纯黄色255,255,0替代纯蓝色0,0,255 (位于从下起第二行,第三列)。在上面的调色板中,它键的数字是4(粗体表示的)。
有两种方法我们可以做这个操作。首先,我们可以写入这个属性到一个文本文件,修改它,应用这个新的调色板版本到栅格。或者,第二种方法,直接使用Workbench更改这个属性。
1、在文本编辑器中修改调色板:
这种方法需要两个工作空间,第一个提取调色板(RasterPaletteExtractor)并保存属性到一个文本文件(AttributeFileWriter);然后在文本编译器中打开这个文本文件,把第六行的4 0,0,255,255 改为 4 255,255,0,255;最后一步应用我们修改的调色板到源栅格,使用第二个工作空间,从文本文件中读入调色板到一个属性(AttributeFileReader),移除旧的调色板(RasterPaletteRemover然后从这个属性中添加一个新的调色板(RasterPaletteAdder)。

下面是从源栅格中把纯蓝色变为纯黄色后的栅格:

栅格调色板(Raster Palette )操作示例


2、在Workbench中修改调色板:

前面的解决方法看起来不是很好——必须做两个工作空间,或者在两步间修改这个工作空间,可以尝试直接在工作空间中修改属性,使用[[AttributeSplitter]]可以得到调色板键项的列表。

 为了能读取单个列表元素,必须展开它们——右键单击AtributeSplitter的列表属性,选中Expose Elements菜单,在这个对话框中,我们必须输入我们想要看到的元素的数目——在我们的例子中这个数字时6。这将展开列表元素到_list{5},相关的键值是4。

栅格调色板(Raster Palette )操作示例


现在我们可以直接使用AttributeSetter函数把属性_list{5}的键值设置为4 255,255,0,255。
然后使用ListConcatenator组合列表元素为一个字符串属性。
剩下的与第一种方法的操作相同——RasterPaletteRemover函数用来移除旧的调色板,RasterPaletteAdder把新的调色板应用到栅格。

总结:

用哪种方法比较好,取决于我们编辑调色板的需要。复杂的、对于较大的调色板的条件更改在Workbench中比较困难——使用一个文本编辑器辅助可能比使用一长串的函数更好。另一方面,定期的产品任务可以考虑放置所有的修改到一个处理过程中。