Efecto de saturación usando SVG Color Matrix en C#

¿Alguna vez ha notado que algunas imágenes en Internet se ven demasiado brillantes o que los colores no son del todo correctos? Esto se debe a un fenómeno llamado efecto de saturación. En este artículo, aprenderemos cómo lograr el efecto de saturación con una matriz de color SVG en C#.

En primer lugar, aprenderemos sobre el efecto de saturación y echaremos un vistazo a la API de C# SVG para aplicar el filtro de matriz de color SVG. A continuación, veremos los pasos para corregir el efecto de saturación mediante el uso de la matriz de color para ajustar los colores de una imagen. Finalmente, proporcionaremos enlaces útiles para futuras mejoras. ¡Entonces empecemos!

Este artículo cubrirá los siguientes temas:

  1. Qué es el efecto de saturación y la matriz de color SVG
  2. API SVG de C# para el efecto de saturación usando Matriz de color
  3. Cómo usar la matriz de color SVG para el efecto de saturación
  4. Crear un efecto de saturación usando Color Matrix en C#

¿Qué es el efecto de saturación y la matriz de color SVG?

El efecto de saturación es una técnica común de procesamiento de imágenes que se utiliza para hacer que una imagen parezca más vibrante. Describe la intensidad del color.

El efecto de saturación es causado por la forma en que nuestro cerebro procesa el color. Cuando vemos una imagen, nuestro cerebro ajusta automáticamente los colores para que se vean más naturales. Sin embargo, cuando una imagen tiene demasiado color, o los colores no están equilibrados de manera uniforme, nuestro cerebro tiene más dificultades para procesar la imagen, lo que puede causar el efecto de saturación.

Podemos lograr el efecto de saturación usando el elemento de filtro SVG . Proporciona un filtro para las transformaciones de color para cambiar los colores en función de una matriz de transformación.

API de C# SVG para el efecto de saturación usando Color Matrix

El efecto de saturación es un caso especial del uso de la matriz de color. Usaremos la API Aspose.SVG para .NET para usar la operación de saturación de la primitiva de filtro . La API permite cargar, analizar, renderizar, crear y convertir archivos SVG a formatos populares sin dependencias de software.

Descargue la DLL de la API o instálela usando NuGet.

PM> Install-Package Aspose.SVG

Cómo usar la matriz de color SVG para el efecto de saturación

aplica una transformación matricial a los canales RGBA de cada píxel en la imagen de entrada. Podemos usar el elemento SVG para el efecto de saturación siguiendo los pasos que se detallan a continuación:

  1. Defina un documento SVG y establezca la URL del espacio de nombres SVG.
  2. Cree un elemento de imagen y un elemento de filtro.
  3. Añada el elemento gráfico.
  4. Cree un elemento feColorMatrix y agréguelo al elemento de filtro.
  5. Guarde la imagen SVG de salida.

La siguiente sección describe cómo transformar estos pasos en código C# y crear un efecto de saturación en SVG.

Cree un efecto de saturación usando Color Matrix en C#

Podemos crear un efecto de saturación utilizando el elemento siguiendo los pasos que se indican a continuación:

  1. En primer lugar, cree una instancia de la clase SVGDocument.
  2. A continuación, acceda al elemento SVG raíz y especifique la URL del espacio de nombres para SVG.
  3. Luego, inicialice el objeto de clase SVGImageElement.
  4. Mientras tanto, establezca una ruta de imagen y otras propiedades para SVGImageElement.
  5. A continuación, defina el objeto de clase SVGDefsElement y agréguelo al elemento raíz.
  6. Luego, cree el objeto de clase SVGFilterElement y agréguelo a SVGDefsElement.
  7. A continuación, defina el objeto de clase SVGFEColorMatrixElement.
  8. Luego, configure los atributos requeridos tipo ig: saturar
  9. Después de eso, agregue SVGFEColorMatrixElement a SVGFilterElement.
  10. Finalmente, guarde el archivo SVG de salida utilizando el método Save().

El siguiente ejemplo de código muestra cómo crear un efecto de saturación con la matriz de color en C#.

// Este ejemplo de código demuestra cómo crear un efecto de saturación con la matriz de color en C#.
// Crear una instancia del SVGDocument
var document = new SVGDocument();

// Obtenga el elemento svg raíz del documento
var svgElement = document.RootElement;

const string SvgNamespace = "http://www.w3.org/2000/svg";

var imageElement = (SVGImageElement)document.CreateElementNS(SvgNamespace, "image");
imageElement.Href.BaseVal = @"C:\Files\lighthouse.jpg";
imageElement.Height.BaseVal.ConvertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX);
imageElement.Width.BaseVal.ConvertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX);
imageElement.Height.BaseVal.Value = 640;
imageElement.Width.BaseVal.Value = 480;
imageElement.X.BaseVal.Value = 20;
imageElement.Y.BaseVal.Value = 20;
imageElement.SetAttribute("filter", "url(#CM)");
svgElement.AppendChild(imageElement);

// Cree un elemento defs y agréguelo a svgElement
Aspose.Svg.SVGDefsElement defsElement = (Aspose.Svg.SVGDefsElement)document.CreateElementNS(SvgNamespace, "defs");
svgElement.AppendChild(defsElement);

// Cree un elemento de filtro y agréguelo a defsElement
Aspose.Svg.SVGFilterElement filterElement = (Aspose.Svg.SVGFilterElement)document.CreateElementNS(SvgNamespace, "filter");
defsElement.AppendChild(filterElement);

// Crear un elemento feColorMatrix
var feColorMatrixElement = (SVGFEColorMatrixElement)document.CreateElementNS(SvgNamespace, "feColorMatrix");
feColorMatrixElement.In1.BaseVal = "SourceGraphic";
feColorMatrixElement.SetAttribute("type", "saturate");
feColorMatrixElement.SetAttribute("values", "2");
filterElement.Id = "CM";

// Agregar al elemento de filtro
filterElement.AppendChild(feColorMatrixElement);

// Guarde el documento SVG
document.Save("C:\\Files\\ColorEffect.svg");
Imagen de origen faro.jpg

Imagen de entrada de origen

Efecto de saturación usando matriz de color SVG

Efecto de saturación usando SVG Color Matrix en C#

<svg xmlns="http://www.w3.org/2000/svg">
    <image href="file:///C:/Files/lighthouse.jpg" height="640" width="480" x="20" y="20" filter="url(#CM)"/>
    <defs>
        <filter id="CM">
            <feColorMatrix in="SourceGraphic" type="saturate" values="2"/>
        </filter>
    </defs>
</svg>

Obtenga una licencia de API gratuita

Puede obtener una licencia temporal gratuita para probar la biblioteca sin limitaciones de evaluación.

Conclusión

En este artículo, ha aprendido sobre el efecto de saturación en las imágenes. También hemos visto cómo aplicar el efecto de color de saturación usando los filtros de matriz de color SVG en C#. Además, puede obtener más información sobre Aspose.SVG para .NET utilizando documentación y explorar varias funciones que ofrece la API. En caso de cualquier ambigüedad, no dude en contactarnos en nuestro foro de soporte gratuito.

Ver también