MS RFC 87:位图模式支持

日期

2013/01/14

作者

塔玛斯塞克勒斯

联系

gmail.com上的szekerest

状态

草稿

版本

TBD

1。概述

通过这个添加,我们可以很容易地定义画笔图案,了解颜色和背景颜色设置,并与各种渲染器进行同样良好的渲染。目前,我们没有这样的选择来实现相同的结果,通过使用矢量符号,我们不能为大多数渲染器(agg,cairo)提供相同的外观,因为线条图形可能具有抗锯齿行为。

根据下面的示例,位图模式将被定义为Patternmap类型的符号:

SYMBOL
  NAME "mapinfo-brush-54"
  TYPE PATTERNMAP
  IMAGE "|10000010|01000100|00111001|01000100|10000010|00000001|00000001|00000001"
END

此符号将提供以下画笔填充:

../../_images/mapinfo-brush-54-fill.png

位图模式可以根据“图像”部分中指定的行的长度以任意大小定义。

位图模式不可缩放,无法旋转,并且间隙始终设置为零。图案可以识别样式部分中定义的颜色和背景色。

2。建议的解决方案

我们将定义一个新的符号类型patternmap,maplexer.l将被修改以了解这个新的关键字。新的符号类型将以与PixMap符号相同的方式呈现。MOS的显著区别在于,平铺图像是动态创建的,而不是从文件加载图像。

三。实施细节

在mapsymbol.c中,将修改mspreloadImageSymbol,以根据“图像”部分指定的位图以适当的大小初始化栅格缓冲区。在maprendering.c中,gettile将被修改为渲染图像:

case (MS_SYMBOL_PATTERNMAP):
      if(msPreloadImageSymbol(renderer,symbol) != MS_SUCCESS) {
        return NULL; /* failed to load image, renderer should have set the error message */
      }
      msCreateBitmapSymbol(symbol, s);
      renderer->renderPixmapSymbol(tileimg, p_x, p_y, symbol, s);
      break;

新函数mscreatebitmapsymbol将处理符号定义中的图像部分,并根据样式颜色设置像素。

将修改computesymbolStyle(在maprendering.c中),以便在渲染之前设置颜色比例间隙和旋转参数。

4。受影响的文件

  • maplexer.l,maplexer.l:添加patternmap关键字

  • mapsymbol.h:添加ms_symbol_patternmap枚举值

  • c:修改解析器、编写器和MSPreloadImageSymbol

  • maprendering.c:添加mscreatebitmapsymbol,修改computesymbolStyle、gettile等。

  • mapdraw.c:修改msdrawvectorlayer,msdrawshape以了解ms_符号_patternmap

5.错误ID

包含示例实现的链接。

6。向后兼容性问题

不需要,新功能。

7。mapscript更改

MS-Symbol-Patternmap将作为新的符号类型公开。

8。投票历史

TBD。