- 积分
- 797
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-8-1
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 tinysand 于 2013-4-24 12:46 编辑
目的:写了一个函数实现大于或小于某一阈值的等值面的渲染
函数如下。现象:当实现大于某一阈值的渲染时(iValueSymbol==1),没有问题出现。当实现小于某一阈值渲染时(iValueSymbol==-1),语句: aLS.LegendBreaks[cNum - 1].Color = Color.FromArgb(0, Color.Red);没有将透明度设置为0,不起作用。但如果将颜色的透明度变为非零值,如aLS.LegendBreaks[cNum - 1].Color = Color.FromArgb(100, Color.Red);又起作用了。
图中的色标是根据Layer的LegendBreaks.Color画出来的。
透明度100
透明度0
/// <summary>
/// 生成并渲染图层
/// </summary>
/// <param name="sLayerName">图层名</param>
/// <param name="fValues">等值线的值</param>
/// <param name="startColor">开始颜色</param>
/// <param name="endColor">结束颜色</param>
/// <param name="iValueSymbol">阈值符号1为小于阈值的不显示,-1为大于阈值 的不显示</param>
internal void GenRenLayer(string sLayerName, double[] fValues,
Color startColor, Color endColor, short iValueSymbol)
{
//等值线条数
int cNum = fValues.Count();
LegendScheme aLS = LegendManage.CreateGraduatedLegendScheme(fValues,
CreateColors(startColor, endColor, cNum), ShapeTypes.Polygon,
m_GridData.GetMinValue(), m_GridData.GetMaxValue(), false, -9999);
if (iValueSymbol == 1)
{
//将小于阈值之外的值透明度设置为0
aLS.LegendBreaks[0].Color = Color.FromArgb(0, Color.Red);
}
if (iValueSymbol == -1)
{
//将大于阈值之外的值透明度设置为0(下面这一行代码出问题!)
aLS.LegendBreaks[cNum - 1].Color = Color.FromArgb(0, Color.Red);
}
//创建等值线图层
VectorLayer aLayer = DrawMeteoData.CreateShadedLayer(m_GridData, aLS, sLayerName, "Value");
aLayer.IsMaskout = true;
//添加图层
m_mainMapView.AddLayer(aLayer);
}
|
|