5 votos

¿Cómo cambiar la transparencia de un ILayer?

He creado una función que establece el IColor a un determinado ILayer El valor de la transparencia está entre 0 y 255. Cuando pongo el valor en 0, me da una capa transparente que está bien, pero cuando lo pongo en 1,2,3,4,5,....255 me da el color como si tuviera 255 de transparencia. No entiendo, qué es lo que falla en mi código:

public static void setLayerColor(ILayer layer, IColor fillColor, IColor outlineColor, short width = 1)
    {if (layer == null || fillColor == null || outlineColor == null) return;
     IGeoFeatureLayer geoFeatureLayer = (IGeoFeatureLayer)layer;
     ISimpleRenderer simpleRenderer = (ISimpleRenderer)geoFeatureLayer.Renderer;

     ISimpleFillSymbol symbol = new SimpleFillSymbolClass();
     ILineSymbol lineSymbol = new SimpleLineSymbolClass();

     lineSymbol.Width = width;
     lineSymbol.Color = outlineColor;

     symbol.Color = fillColor;
     symbol.Outline = lineSymbol;
     simpleRenderer.Symbol = (ISymbol)symbol;}

Mi función tiene 4 parámetros:

  • ILayer la capa de la que quiero cambiar su color.

  • IColor , fillColor.

  • IColor , outlineColor.

  • short la anchura del contorno.

5voto

Flinkman Puntos 4821

Estoy asumiendo que usted está tratando de establecer el IColor como RGBA con la transparencia en el color ... eso no es cómo funciona, cuando se crea un IColor de RGBA sólo el RGB se establece, el alfa se ignora ... ver IColor Las opciones son CMYK, Gris, HLS, HSV, RGB - ninguna de ellas tiene Alfa.

Para obtener transparencia en una capa es necesario utilizar la función Interfaz ILayerEffects y específicamente el Propiedad de la transparencia - asegúrese de comprobar primero si el tipo de capa apoya la transparencia antes de intentar utilizar esa propiedad.

Asumiendo que tu capa es una capa de características (estás creando un símbolo de polígono así que es una buena apuesta) necesitas establecer el Renderizador ( IFeatureRenderer ) que está disponible en IGeoFeatureLayer que es implementado por IFeatureLayer .

simpleRenderer.Symbol = (ISymbol)symbol;  //last line of your code
IFeatureLayer AsFeatureLayer = (IFeatureLayer)layer;
IGeoFeatureLayer AsGeoFeatureLayer = (IGeoFeatureLayer) AsFeatureLayer;
AsGeoFeatureLayer.Renderer = (IFeatureRenderer)simpleRenderer; // set the renderer to the layer
ILayerEffects AsLayerEffects = (ILayerEffects) AsFeatureLayer;
AsLayerEffects.Transparency = 50; // 50% transparent

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X