Mättnadseffekt med SVG Color Matrix i C#

Har du någonsin märkt hur vissa bilder på internet ser för ljusa ut, eller att färgerna helt enkelt inte stämmer? Detta beror på ett fenomen som kallas mättnadseffekten. I den här artikeln kommer vi att lära oss hur man uppnår mättnadseffekten med en SVG-färgmatris i C#.

Först ska vi lära oss om mättnadseffekten och ta en titt på C# SVG API för att tillämpa SVG-färgmatrisfiltret. Därefter går vi igenom stegen för hur man fixar mättnadseffekten genom att använda färgmatrisen för att justera färgerna i en bild. Slutligen kommer vi att tillhandahålla användbara länkar för ytterligare förbättringar. Så låt oss komma igång!

Den här artikeln ska täcka följande ämnen:

  1. Vad är mättnadseffekt och SVG-färgmatris
  2. C# SVG API för mättnadseffekt med färgmatris
  3. Hur man använder SVG Color Matrix för mättnadseffekt
  4. Skapa mättnadseffekt med färgmatris i C#

Vad är Saturation Effect och SVG Color Matrix

Mättnadseffekten är en vanlig bildbehandlingsteknik som används för att få en bild att se mer levande ut. Den beskriver färgens intensitet.

Mättnadseffekten orsakas av hur våra hjärnor bearbetar färg. När vi ser en bild justerar vår hjärna automatiskt färgerna för att få dem att se mer naturliga ut. Men när en bild har för mycket färg, eller färgerna inte är jämnt balanserade, har vår hjärna svårare att bearbeta bilden, vilket kan orsaka mättnadseffekten.

Vi kan uppnå mättnadseffekten med hjälp av SVG-filterelementet. Det tillhandahåller ett filter för färgomvandlingar för att ändra färger baserat på en transformationsmatris.

C# SVG API för mättnadseffekt med färgmatris

Mättnadseffekten är ett specialfall av att använda färgmatrisen. Vi kommer att använda Aspose.SVG för .NET API för att använda mättnadsoperationen för filterprimitiven . API:et tillåter inläsning, analys, rendering, skapande och konvertering av SVG-filer till populära format utan några programberoenden.

Vänligen antingen ladda ned API:ets DLL eller installera den med NuGet.

PM> Install-Package Aspose.SVG

Hur man använder SVG Color Matrix för mättnadseffekt

tillämpar en matristransformation på RGBA-kanalerna för varje pixel i inmatningsbilden. Vi kan använda SVG element för mättnadseffekt genom att följa stegen nedan:

  1. Definiera ett SVG-dokument och ange SVG-namnområdets URL.
  2. Skapa ett bildelement och ett filterelement.
  3. Lägg till det grafiska elementet.
  4. Skapa ett feColorMatrix-element och lägg till det i filterelementet.
  5. Spara den utgående SVG-bilden.

Följande avsnitt beskriver hur du omvandlar dessa steg till C#-kod och skapar en mättnadseffekt i SVG.

Skapa mättnadseffekt med Color Matrix i C#

Vi kan skapa en mättnadseffekt med hjälp av elementet genom att följa stegen nedan:

  1. Skapa först en instans av klassen SVGDocument.
  2. Öppna sedan rot-SVG-elementet och ange namnområdets URL för SVG.
  3. Initiera sedan klassobjektet SVGImageElement.
  4. Under tiden ställer du in en bildsökväg och andra egenskaper för SVGImageElement.
  5. Definiera sedan klassobjektet SVGDefsElement och lägg till det i rotelementet.
  6. Skapa sedan klassobjektet SVGFilterElement och lägg till det i SVGDefsElement.
  7. Därefter definierar du klassobjektet SVGFEColorMatrixElement.
  8. Ställ sedan in de nödvändiga attributen ig type: saturate
  9. Efter det lägger du till SVGFEColorMatrixElement till SVGFilterElement.
  10. Spara slutligen den utgående SVG-filen med metoden Save().

Följande kodexempel visar hur man skapar en mättnadseffekt med färgmatrisen i C#.

// Detta kodexempel visar hur man skapar en mättnadseffekt med färgmatrisen i C#.
// Skapa en instans av SVGDocumentet
var document = new SVGDocument();

// Hämta root svg-elementet i dokumentet
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);

// Skapa ett defs-element och lägg till i svgElement
Aspose.Svg.SVGDefsElement defsElement = (Aspose.Svg.SVGDefsElement)document.CreateElementNS(SvgNamespace, "defs");
svgElement.AppendChild(defsElement);

// Skapa ett filterelement och lägg till i defsElement
Aspose.Svg.SVGFilterElement filterElement = (Aspose.Svg.SVGFilterElement)document.CreateElementNS(SvgNamespace, "filter");
defsElement.AppendChild(filterElement);

// Skapa ett feColorMatrix-element
var feColorMatrixElement = (SVGFEColorMatrixElement)document.CreateElementNS(SvgNamespace, "feColorMatrix");
feColorMatrixElement.In1.BaseVal = "SourceGraphic";
feColorMatrixElement.SetAttribute("type", "saturate");
feColorMatrixElement.SetAttribute("values", "2");
filterElement.Id = "CM";

// Lägg till filterelement
filterElement.AppendChild(feColorMatrixElement);

// Spara SVG-dokumentet
document.Save("C:\\Files\\ColorEffect.svg");
Källbild lighthouse.jpg

Källindatabild

Mättnadseffekt med SVG Color Matrix

Mättnadseffekt med SVG Color Matrix i 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>

Skaffa en gratis API-licens

Du kan få en gratis tillfällig licens för att prova biblioteket utan utvärderingsbegränsningar.

Slutsats

I den här artikeln har du lärt dig om mättnadseffekten på bilder. Vi har också sett hur man tillämpar mättnadsfärgeffekten med SVG-färgmatrisfiltren i C#. Dessutom kan du lära dig mer om Aspose.SVG för .NET med hjälp av dokumentation och utforska olika funktioner som erbjuds av API:et. I händelse av oklarheter är du välkommen att kontakta oss på vårt gratis supportforum.

Se även