Note sulla versione Aspose.PSD per .NET 18.8

Contents
[ ]
Chiave Sommario Categoria
PSDNET-68 Supporto della proprietà LayerCreationDateTime. Funzionalità
PSDNET-67 Supporto dell’Evidenziazione del colore del foglio Funzionalità
PSDNET-66 Possibilità di unire i livelli tra loro Funzionalità
PSDNET-65 Aggiunto il supporto parziale della proprietà BoundBox del livello di testo Funzionalità
PSDNET-64 Aggiunto il supporto per IopaResource Funzionalità
PSDNET-56 Supporto degli effetti del livello per il formato PSD Funzionalità
PSDNET-55 Supporto InterruptMonitor per .Net Funzionalità
PSDNET-50 Possibilità di appiattire i livelli Funzionalità
PSDNET-49 Aggiunta della resa della proprietà opacità di riempimento nei livelli. Funzionalità
PSDNET-43 Implementazione della resa del livello di regolazione delle curve Funzionalità
PSDNET-42 Aggiunto il supporto del livello di regolazione delle curve Funzionalità
PSDNET-41 Implementazione della resa del livello di regolazione dei livelli Funzionalità
PSDNET-40 Aggiunto il supporto del livello di regolazione dei livelli Funzionalità
PSDNET-37 Aggiunto il supporto del livello di regolazione del mixer dei canali Funzionalità
PSDNET-35 Aggiunto il supporto del livello di regolazione dell’Hue/Saturation Funzionalità
PSDNET-34 Implementazione della resa del livello di regolazione dell’esposizione per l’esportazione. Funzionalità
PSDNET-31 Aggiunto il supporto della resa per l’esportazione del livello di regolazione del mixer dei canali Funzionalità
PSDNET-26 Aggiunto il supporto del mascheramento di ritaglio Funzionalità
PSDNET-13 Aggiunto il supporto del maschera del livello Funzionalità
PSDNET-9 Aggiunto il supporto del livello di regolazione del filtro fotografico Funzionalità
PSDNET-8 Aggiunto il supporto del livello di regolazione del mixer dei canali Funzionalità
PSDNET-7 Aggiunto il supporto del livello di regolazione dell’esposizione Funzionalità
PSDNET-6 Aggiunto il supporto del livello di regolazione della luminosità/contrasto Funzionalità
PSDNET-5 Aggiunto il supporto parziale dei livelli di regolazione Funzionalità
PSDNET-3 Aggiunto il supporto per l’opzione di testo NoBreak di PSD Funzionalità
PSDNET-2 Possibilità di aggiungere un livello di testo in fase di esecuzione Funzionalità
PSDNET-62 Il codec TIFF non può salvare l’immagine a canale a 16 bit Potenziamento
PSDNET-61 Il salvataggio di un’immagine PSD produce colori dell’immagine non validi Potenziamento
PSDNET-60 Coordinate dell’angolo in alto a sinistra non corrette durante l’aggiornamento Potenziamento
PSDNET-59 Eccezione durante l’aggiornamento dei livelli di testo Potenziamento
PSDNET-58 Esposizione della proprietà Codec dell’immagine JPEG2000 al pubblico Potenziamento
PSDNET-57 Risolvere le impostazioni di opzioni a 24 bpp per l’esportazione in BMP Potenziamento
PSDNET-46 Il livello di regolazione viene ignorato per la conversione PSD CMYK in TIFF o JPG Potenziamento

Esempi d’uso:

PSDNET-68 Supporto della proprietà LayerCreationDateTime

 // Esempio di utilizzo della proprietà LayerCreationDateTime

string sourceFileName = "OneLayer.psd";

using (var im = (PsdImage)(Image.Load(sourceFileName)))

{

    var layer = im.Layers[0];

    var creationDateTime = layer.LayerCreationDateTime;

    var expectedDateTime = new DateTime(2018, 7, 17, 8, 57, 24, 769);

    Assert.AreEqual(expectedDateTime, creationDateTime);

    var now = DateTime.Now;

    var createdLayer = im.AddLevelsAdjustmentLayer();

    // Verifica se la data di creazione è stata aggiornata sui nuovi livelli creati

    Assert.True(now <= createdLayer.LayerCreationDateTime);

}

PSDNET-67 Supporto dell’Evidenziazione del colore del foglio

 // Esempio di utilizzo della proprietà SheetColorHighlight

string sourceFileName = "SheetColorHighlightExample.psd";

string exportPath = "SheetColorHighlightExampleChanged.psd";

using (var im = (PsdImage)(Image.Load(sourceFileName)))

{

    var layer1 = im.Layers[0];

    Assert.AreEqual(SheetColorHighlightEnum.Violet, layer1.SheetColorHighlight);

    var layer2 = im.Layers[1];

    Assert.AreEqual(SheetColorHighlightEnum.Orange, layer2.SheetColorHighlight);

    layer1.SheetColorHighlight = SheetColorHighlightEnum.Yellow;

    im.Save(exportPath);	

}

PSDNET-66 Possibilità di unire i livelli tra loro

 // Esempio di unione di due livelli

var sourceFile1 = "FillOpacitySample.psd";

var sourceFile2 = "ThreeRegularLayersSemiTransparent.psd";

var exportPath = "MergedLayersFromTwoDifferentPsd.psd" 

using (var im1 = (PsdImage)(Image.Load(sourceFile1)))

{

    var layer1 = im1.Layers[1];

    using (var im2 = (PsdImage)(Image.Load(sourceFile2)))

    {

        var layer2 = im2.Layers[0];

        layer1.MergeLayerTo(layer2);

	    im2.Save(exportPath);	

    }

}

PSDNET-65 Aggiunto il supporto parziale della proprietà BoundBox del livello di testo

 // Esempio di BoundBox del testo

string sourceFileName = "LayerWithText.psd";

var correctOpticalSize = new Size(127, 45);

var correctBoundBox = new Size(172, 62);

using (var im = (PsdImage)(Image.Load(sourceFileName)))

{

    var textLayer = (TextLayer)im.Layers[1];

    // La dimensione del livello è la dimensione dell'area renderizzata

    var opticalSize = textLayer.Size;

    Assert.AreEqual(correctOpticalSize, opticalSize);

    // TextBoundBox è la dimensione massima del livello per il livello di testo.
    // In quest'area PS tenterà di adattare il testo

    var boundBox = textLayer.TextBoundBox;

    Assert.AreEqual(correctBoundBox, boundBox);

}

PSDNET-64 Aggiunto il supporto per IopaResource

 // Cambia la proprietà di opacità di riempimento tramite il cambio di IopaResource

string sourceFileName = "FillOpacitySample.psd";

string exportPath = "FillOpacitySampleChanged.psd";

using (var im = (PsdImage)(Image.Load(sourceFileName)))

{

    var layer = im.Layers[2];

    var resources = layer.Resources;

    foreach (var resource in resources)

    {

        if (resource is IopaResource)

        {

            var iopaResource = (IopaResource)resource;

            iopaResource.FillOpacity = 200;

        }

    }

    im.Save(exportPath);	

}

PSDNET-56 Supporto degli Effetti del Livello per il formato PSD

 using (

    PsdImage image =

        (PsdImage)

        Aspose.PSD.Image.Load(

            sourceFileName,

            new Aspose.PSD.ImageLoadOptions.PsdLoadOptions()

            {

                LoadEffectsResource = true,

                UseDiskForLoadEffectsResource = true

            }))

{

    image.Save(

                output,

                new Aspose.PSD.ImageOptions.PngOptions()

                {

                    ColorType =

                            Aspose.PSD.FileFormats.Png

                            .PngColorType

                            .TruecolorWithAlpha

                });

}

PSDNET-55 Supporto InterruptMonitor per .Net

         public void TestInterruptMonitor(string dir, string ouputDir)

        {

            ImageOptionsBase saveOptions = new ImageOptions.PngOptions();

            Multithreading.InterruptMonitor monitor = new Multithreading.InterruptMonitor();

            SaveImageWorker worker = new SaveImageWorker(dir + "big.psb", dir + "big_out.png", saveOptions, monitor);

            System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(worker.ThreadProc));

            try

            {

                thread.Start();

                // Il timeout dovrebbe essere inferiore al tempo richiesto per la conversione completa dell'immagine (senza interruzioni).

                System.Threading.Thread.Sleep(3000);

                // Interrompe il processo

                monitor.Interrupt();

                System.Console.WriteLine("Interrompo il thread di salvataggio #{0} a {1}", thread.ManagedThreadId, System.DateTime.Now);

                // Attendere l'interruzione...

                thread.Join();

            }

            finally

            {

                // Se il file da eliminare non esiste, non viene generata alcuna eccezione.

                System.IO.File.Delete(dir + "big_out.png");

            }

        }

        /// <summary>

        /// Avvia la conversione dell'immagine e attendi la sua interruzione.

        /// </summary>

        private class SaveImageWorker

        {

            /// <summary>

            /// Il percorso dell'immagine di input.

            /// </summary>

            private readonly string inputPath;

            /// <summary>

            /// Il percorso dell'immagine di output.

            /// </summary>

            private readonly string outputPath;

            /// <summary>

            /// Il monitor di interruzione.

            /// </summary>

            private readonly Multithreading.InterruptMonitor monitor;

            /// <summary>

            /// Le opzioni di salvataggio.

            /// </summary>

            private readonly ImageOptionsBase saveOptions;

            /// <summary>

            /// Inizializza una nuova istanza della classe SaveImageWorker.

            /// </summary>

            /// <param name="inputPath">Il percorso dell'immagine di input.</param>

            /// <param name="outputPath">Il percorso dell'immagine di output.</param>

            /// <param name="saveOptions">Le opzioni di salvataggio.</param>

            /// <param name="monitor">Il monitor di interruzione.</param>

            public SaveImageWorker(string inputPath, string outputPath, ImageOptionsBase saveOptions, Multithreading.InterruptMonitor monitor)

            {

                this.inputPath = inputPath;

                this.outputPath = outputPath;

                this.saveOptions = saveOptions;

                this.monitor = monitor;

            }

            /// <summary>

            /// Tenta di convertire l'immagine da un formato all'altro. Gestisce l'interruzione.

            /// </summary>

            public void ThreadProc()

            {

                using (Image image = Image.Load(this.inputPath))

                {

                    Multithreading.InterruptMonitor.ThreadLocalInstance = this.monitor;

                    try

                    {

                        image.Save(this.outputPath, this.saveOptions);

                        Assert.Fail("Interruzione prevista.");

                    }

                    catch (CoreExceptions.OperationInterruptedException e)

                    {

                        System.Console.WriteLine("Il thread di salvataggio #{0} termina alle {1}", System.Threading.Thread.CurrentThread.ManagedThreadId, System.DateTime.Now);

                        System.Console.WriteLine(e);

                    }

                    catch (System.Exception e)

                    {

                        System.Console.WriteLine(e);

                    }

                    finally

                    {

                        Multithreading.InterruptMonitor.ThreadLocalInstance = null;

                    }

                }

            }

        }

PSDNET-50 Possibilità di appiattire i livelli

 // Appiattire l'intero PSD

string sourceFileName = "ThreeRegularLayersSemiTransparent.psd";

string exportPath = "ThreeRegularLayersSemiTransparentFlattened.psd";

using (var im = (PsdImage)(Image.Load(sourceFileName)))

{

    im.FlattenImage();

    im.Save(exportPath);	 

}

// Unisci un livello in un altro

string sourceFileName = "ThreeRegularLayersSemiTransparent.psd";

string exportPath = "ThreeRegularLayersSemiTransparentFlattenedLayerByLayer.psd";

using (var im = (PsdImage)(Image.Load(sourceFileName)))

{

    var bottomLayer = im.Layers[0];

    var middleLayer = im.Layers[1];

    var topLayer = im.Layers[2];

    var layer1 = im.MergeLayers(bottomLayer, middleLayer);

    var layer2 = im.MergeLayers(layer1, topLayer);

    // Imposta i livelli uniti

    im.Layers = new Layer[] { layer2 };

    im.Save(exportPath);	 

}

PSDNET-49 Aggiunta della resa della proprietà opacità di riempimento nei livelli

 // Cambia la proprietà di opacità di riempimento

string sourceFileName = "FillOpacitySample.psd";

string exportPath = "FillOpacitySampleChanged.psd";

using (var im = (PsdImage)(Image.Load(sourceFileName)))

{

    var layer = im.Layers[2];

    layer.FillOpacity = 5;

    im.Save(exportPath);	

}

PSDNET-43 Implementazione della resa del livello di regolazione delle curve

 // Modifica livello di curve

string sourceFileName = "CurvesAdjustmentLayer";

string psdPathAfterChange = "CurvesAdjustmentLayerChanged";

string pngExportPath = "CurvesAdjustmentLayerChanged";

for (int j = 1; j < 2; j++)

{

    using (var im = LoadFile(sourceFileName + j.ToString() + ".psd"))

    {

        foreach (var layer in im.Layers)

	{

            if (layer is CurvesLayer)

            {

                 var curvesLayer = (CurvesLayer)layer;

                 if (curvesLayer.IsDiscreteManagerUsed)

                 {

                      var manager = (CurvesDiscreteManager)curvesLayer.GetCurvesManager();

                      for (int i = 10; i < 50; i++)

                      {

                           manager.SetValueInPosition(0, (byte)i, (byte)(15 + (i * 2));

                      }

                 }

                 else

                 {

                      var manager = (CurvesContinuousManager)curvesLayer.GetCurvesManager();

                      manager.AddCurvePoint(0, 50, 100);

                      manager.AddCurvePoint(0, 150, 130);

                 }

            }

        }

    }



    // Salva PSD

    im.Save(psdPathAfterChange + j.ToString() + ".psd");



    // Salva PNG

    var saveOptions = new PngOptions();

    saveOptions.ColorType = PngColorType.TruecolorWithAlpha;

    im.Save(pngExportPath + j.ToString() + ".png", saveOptions);

}

PSDNET-42 Aggiunta del supporto del livello di regolazione delle curve

 // Modifica livello di curve

string sourceFileName = "CurvesAdjustmentLayer";

string psdPathAfterChange = "CurvesAdjustmentLayerChanged";

for (int j = 1; j < 2; j++)

{

    using (var im = LoadFile(sourceFileName + j.ToString() + ".psd"))

    {

         foreach (var layer in im.Layers)

	 {

            if (layer is CurvesLayer)

            {

                 var curvesLayer = (CurvesLayer)layer;

                 if (curvesLayer.IsDiscreteManagerUsed)

                 {

                      var manager = (CurvesDiscreteManager)curvesLayer.GetCurvesManager();

                      for (int i = 10; i < 50; i++)

                      {

                           manager.SetValueInPosition(0, (byte)i, (byte)(15 + (i * 2));

                      }

                 }

                 else

                 {

                      var manager = (CurvesContinuousManager)curvesLayer.GetCurvesManager();

                      manager.AddCurvePoint(0, 50, 100);

                      manager.AddCurvePoint(0, 150, 130);

                 }

            }
	}

    }



    // Salva PSD

    im.Save(psdPathAfterChange + j.ToString() + ".psd");

}

PSDNET-41 Implementazione della resa del livello di regolazione dei livelli

 // Modifica livello di livellamento

string sourceFileName = "LevelsAdjustmentLayer.psd";

string psdPathAfterChange = "LevelsAdjustmentLayerChanged.psd";

string pngExportPath = "LevelsAdjustmentLayerChanged.png";

using (var im = LoadFile(sourceFileName))

{

    foreach (var layer in im.Layers)

    {

        if (layer is LevelsLayer)

        {

            var levelsLayer = (LevelsLayer)layer;

            var channel = levelsLayer.GetChannel(0);

            channel.InputMidtoneLevel = 2.0f;

            channel.InputShadowLevel = 10;

            channel.InputHighlightLevel = 230;

            channel.OutputShadowLevel = 20;

            channel.OutputHighlightLevel = 200;

        }

    }



    // Salva PSD

    im.Save(psdPathAfterChange);



    // Salva PNG

    var saveOptions = new PngOptions();

    saveOptions.ColorType = PngColorType.TruecolorWithAlpha;

    im.Save(pngExportPath, saveOptions);

}

**PSDNET-40 Aggiunto il supporto del livello di regolazione dei livelli**

<div class="highlight"><pre class="chroma"><code class="language-java" data-lang="java"> <span class="c1">// Modifica del livello di livellamento
</span><span class="c1"></span>
<span class="n">string</span> <span class="n">sourceFileName</span> <span class="o">=</span> <span class="s">&#34;LevelsAdjustmentLayer.psd&#34;</span><span class="o">;</span>

<span class="n">string</span> <span class="n">psdPathAfterChange</span> <span class="o">=</span> <span class="s">&#34;LevelsAdjustmentLayerChanged.psd&#34;</span><span class="o">;</span>

<span class="n">using</span> <span class="o">(</span><span class="n">var</span> <span class="n">im</span> <span class="o">=</span> <span class="n">LoadFile</span><span class="o">(</span><span class="n">sourceFileName</span><span class="o">))</span>

<span class="o">{</span>

    <span class="n">foreach</span> <span class="o">(</span><span class="n">var</span> <span class="n">layer</span> <span class="n">in</span> <span class="n">im</span><span class="o">.</span><span class="na">Layers</span><span class="o">)</span>

    <span class="o">{</span>

        <span class="k">if</span> <span class="o">(</span><span class="n">layer</span> <span class="n">is</span> <span class="n">LevelsLayer</span><span class="o">)</span>

        <span class="o">{</span>

            <span class="n">var</span> <span class="n">levelsLayer</span> <span class="o">=</span> <span class="o">(</span><span class="n">LevelsLayer</span><span class="o">)</span><span class="n">layer</span><span class="o">;</span>

            <span class="n">var</span> <span class="n">channel</span> <span class="o">=</span> <span class="n">levelsLayer</span><span class="o">.</span><span class="na">GetChannel</span><span class="o">(</span><span class="n">0</span><span class="o">);</span>

            <span class="n">channel</span><span class="o">.</span><span class="na">InputMidtoneLevel</span> <span class="o">=</span> <span class="n">2</span><span class="o">.</span><span class="na">0f</span><span class="o">;</span>

            <span class="n">channel</span><span class="o">.</span><span class="na">InputShadowLevel</span> <span class="o">=</span> <span class="n">10</span><span class="o">;</span>

            <span class="n">channel</span><span class="o">.</span><span class="na">InputHighlightLevel</span> <span class="o">=</span> <span class="n">230</span><span class="o">;</span>

            <span class="n">channel</span><span class="o">.</span><span class="na">OutputShadowLevel</span> <span class="o">=</span> <span class="n">20</span><span class="o">;</span>

            <span class="n">channel</span><span class="o">.</span><span class="na">OutputHighlightLevel</span> <span class="o">=</span> <span class="n">200</span><span class="o">;</span>

        <span class="o">}</span>

    <span class="o">}</span>



    <span class="c1">// Salva PSD
</span><span class="c1"></span>
    <span class="n">im</span><span class="o">.</span><span class="na">Save</span><span class="o">(</span><span class="n">psdPathAfterChange</span><span class="o">);</span>

<span class="o">}</span></code></pre></div>

**PSDNET-37 Aggiunto il supporto del livello di regolazione del mixer dei canali**

<div class="highlight"><pre class="chroma"><code class="language-java" data-lang="java"><span class="c1">// Mixer dei canali Rgb
</span><span class="c1"></span>
<span class="n">string</span> <span class="n">sourceFileName</span> <span class="o">=</span> <span class="s">&#34;ChannelMixerAdjustmentLayerRgb.psd&#34;</span><span class="o">;</span>

<span class="n">string</span> <span class="n">psdPathAfterChange</span> <span class="o">=</span> <span class="s">&#34;ChannelMixerAdjustmentLayerRgbChanged.psd&#34;</span><span class="o">;</span>

<span class="n">using</span> <span class="o">(</span><span class="n">var</span> <span class="n">im</span> <span class="o">=</span> <span class="n">LoadFile</span><span class="o">(</span><span class="n">sourceFileName</span><span class="o">))</span>

<span class="o">{</span>

    <span class="n">foreach</span> <span class="o">(</span><span class="n">var</span> <span class="n">layer</span> <span class="n">in</span> <span class="n">im</span><span class="o">.</span><span class="na">Layers</span><span class="o">)</span>

    <span class="o">{</span>

         <span class="k">if</span> <span class="o">(</span><span class="n">layer</span> <span class="n">is</span> <span class="n">RgbChannelMixerLayer</span><span class="o">)</span>

         <span class="o">{</span>

              <span class="n">var</span> <span class="n">rgbLayer</span> <span class="o">=</span> <span class="o">(</span><span class="n">RgbChannelMixerLayer</span><span class="o">)</span><span class="n">layer</span><span class="o">;</span>

              <span class="n">rgbLayer</span><span class="o">.</span><span class="na">RedChannel</span><span class="o">.</span><span class="na">Blue</span> <span class="o">=</span> <span class="n">100</span><span class="o">;</span>

              <span class="n">rgbLayer</span><span class="o">.</span><span class="na">BlueChannel</span><span class="o">.</span><span class="na">Green</span> <span class="o">=</span> <span class="o">-</span><span class="n">100</span><span class="o">;</span>

              <span class="n">rgbLayer</span><span class="o">.</span><span class="na">GreenChannel</span><span class="o">.</span><span class="na">Constant</span> <span class="o">=</span> <span class="n">50</span><span class="o">;</span>

         <span class="o">}</span>

    <span class="o">}</span>



    <span class="n">im</span><span class="o">.</span><span class="na">Save</span><span class="o">(</span><span class="n">psdPathAfterChange</span><span class="o">);</span>

<span class="o">}</span>



<span class="c1">// Mixer dei canali Cmyk
</span><span class="c1"></span>
<span class="n">string</span> <span class="n">sourceFileName</span> <span class="o">=</span> <span class="s">&#34;ChannelMixerAdjustmentLayerCmyk.psd&#34;</span><span class="o">;</span>

<span class="n">string</span> <span class="n">psdPathAfterChange</span> <span class="o">=</span> <span class="s">&#34;ChannelMixerAdjustmentLayerCmykChanged.psd&#34;</span><span class="o">;</span>

<span class="n">using</span> <span class="o">(</span><span class="n">var</span> <span class="n">im</span> <span class="o">=</span> <span class="n">LoadFile</span><span class="o">(</span><span class="n">sourceFileName</span><span class="o">))</span>

<span class="o">{</span>

    <span class="n">foreach</span> <span class="o">(</span><span class="n">var</span> <span class="n">layer</span> <span class="n">in</span> <span class="n">im</span><span class="o">.</span><span class="na">Layers</span><span class="o">)</span>

    <span class="o">{</span>

         <span class="k">if</span> <span class="o">(</span><span class="n">layer</span> <span class="n">is</span> <span class="n">CmykChannelMixerLayer</span><span class="o">)</span>

         <span class="o">{</span>

             <span class="n">var</span> <span class="n">cmykLayer</span> <span class="o">=</span> <span class="o">(</span><span class="n">CmykChannelMixerLayer</span><span class="o">)</span><span class="n">layer</span><span class="o">;</span>

             <span class="n">cmykLayer</span><span class="o">.</span><span class="na">CyanChannel</span><span class="o">.</span><span class="na">Black</span> <span class="o">=</span> <span class="n">20</span><span class="o">;</span>

             <span class="n">cmykLayer</span><span class="o">.</span><span class="na">MagentaChannel</span><span class="o">.</span><span class="na">Yellow</span> <span class="o">=</span> <span class="n">50</span><span class="o">;</span>

             <span class="n">cmykLayer</span><span class="o">.</span><span class="na">YellowChannel</span><span class="o">.</span><span class="na">Cyan</span> <span class="o">=</span> <span class="o">-</span><span class="n">25</span><span class="o">;</span>

             <span class="n">cmykLayer</span><span class="o">.</span><span class="na">BlackChannel</span><span class="o">.</span><span class="na">Yellow</span> <span class="o">=</span> <span class="n">25</span><span class="o">;</span>

         <span class="o">}</span>

    <span class="o">}</span>



    <span class="n">im</span><span class="o">.</span><span class="na">Save</span><span class="o">(</span><span class="n">psdPathAfterChange</span><span class="o">);</span>

<span class="o">}</span>





<span class="c1">// Aggiungere il nuovo livello (Cmyk per questo esempio)
</span><span class="c1"></span>
<span class="n">string</span> <span class="n">sourceFileName</span> <span class="o">=</span> <span class="s">&#34;CmykWithAlpha.psd&#34;</span><span class="o">;</span>

<span class="n">string</span> <span class="n">psdPathAfterChange</span> <span class="o">=</span> <span class="s">&#34;ChannelMixerAdjustmentLayerCmykChanged.psd&#34;</span><span class="o">;</span>

<span class="n">using</span> <span class="o">(</span><span class="n">var</span> <span class="n">im</span> <span class="o">=</span> <span class="n">LoadFile</span><span class="o">(</span><span class="n">sourceFileName</span><span class="o">))</span>

<span class="o">{</span>

    <span class="n">var</span> <span class="n">newlayer</span> <span class="o">=</span> <span class="n">im</span><span class="o">.</span><span class="na">AddChannelMixerAdjustmentLayer</span><span class="o">();</span>

    <span class="n">newlayer</span><span class="o">.</span><span class="na">GetChannelByIndex</span><span class="o">(</span><span class="n">2</span><span class="o">).</span><span class="na">Constant</span> <span class="o">=</span> <span class="n">50</span><span class="o">;</span>

    <span class="n">newlayer</span><span class="o">.</span><span class="na">GetChannelByIndex</span><span class="o">(</span><span class="n">0</span><span class="o">).</span><span class="na">Constant</span> <span class="o">=</span> <span class="n">50</span><span class="o">;</span>



    <span class="n">im</span><span class="o">.</span><span class="na">Save</span><span class="o">(</span><span class="n">psdPathAfterChange</span><span class="o">);</span>

<span class="o">}</span>		</code></pre></div>

**PSDNET-35 Aggiunto il supporto del livello di regolazione dell'Hue/Saturation**

<div class="highlight"><pre class="chroma"><code class="language-java" data-lang="java"> <span class="c1">// Modifica livello di Hue/Saturation
</span><span class="c1"></span>
<span class="n">string</span> <span class="n">sourceFileName</span> <span class="o">=</span> <span class="s">&#34;HueSaturationAdjustmentLayer.psd&#34;</span><span class="o">;</span>

<span class="n">string</span> <span class="n">psdPathAfterChange</span> <span class="o">=</span> <span class="s">&#34;HueSaturationAdjustmentLayerChanged.psd&#34;</span><span class="o">;</span>

<span class="n">using</span> <span class="o">(</span><span class="n">var</span> <span class="n">im</span> <span class="o">=</span> <span class="n">LoadFile</span><span class="o">(</span><span class="n">sourceFileName</span><span class="o">))</span>

<span class="o">{</span>

     <span class="n">foreach</span> <span class="o">(</span><span class="n">var</span> <span class="n">layer</span> <span class="n">in</span> <span class="n">im</span><span class="o">.</span><span class="na">Layers</span><span class="o">)</span>

     <span class="o">{</span>

           <span class="k">if</span> <span class="o">(</span><span class="n">layer</span> <span class="n">is</span> <span class="n">HueSaturationLayer</span><span class="o">)</span>

           <span class="o">{</span>

                <span class="n">var</span> <span class="n">hueLayer</span> <span class="o">=</span> <span class="o">(</span><span class="n">HueSaturationLayer</span><span class="o">)</span><span class="n">layer</span><span class="o">;</span>

                <span class="n">hueLayer</span><span class="o">.</span><span class="na">Hue</span> <span class="o">=</span> <span class="o">-</span><span class="n">25</span><span class="o">;</span>

                <span class="n">hueLayer</span><span class="o">.</span><span class="na">Saturation</span> <span class="o">=</span> <span class="o">-</span><span class="n">12</span><span class="o">;</span>

                <span class="n">hueLayer</span><span class="o">.</span><span class="na">Lightness</span> <span class="o">=</span> <span class="n">67</span><span class="o">;</span>

                <span class="n">var</span> <span class="n">colorRange</span> <span class="o">=</span> <span class="n">hueLayer</span><span class="o">.</span><span class="na">GetRange</span><span class="o">(</span><span class="n">2</span><span class="o">);</span>

                <span class="n">colorRange</span><span class="o">.</span><span class="na">Hue</span> <span class="o">=</span> <span class="o">-</span><span class="n">40</span><span class="o">;</span>

                <span class="n">colorRange</span><span class="o">.</span><span class="na">Saturation</span> <span class="o">=</span> <span class="n">50</span><span class="o">;</span>

                <span class="n">colorRange</span><span class="o">.</span><span class="na">Lightness</span> <span class="o">=</span> <span class="o">-</span><span class="n">20</span><span class="o">;</span>

                <span class="n">colorRange</span><span class="o">.</span><span class="na">MostLeftBorder</span> <span class="o">=</span> <span class="n">300</span><span class="o">;</span>

           <span class="o">}</span>

      <span class="o">}</span>

      <span class="n">im</span><span class="o">.</span><span class="na">Save</span><span class="o">(</span><span class="n">psdPathAfterChange</span><span class="o">);</span>

<span class="o">}</span>



<span class="c1">// Aggiunta di un livello di Hue/Saturation
</span><span class="c1"></span>
<span class="n">string</span> <span class="n">sourceFileName</span> <span class="o">=</span> <span class="s">&#34;PhotoExample.psd&#34;</span><span class="o">;</span>

<span class="n">string</span> <span class="n">psdPathAfterChange</span> <span class="o">=</span> <span class="s">&#34;PhotoExampleAddedHueSaturation.psd&#34;</span><span class="o">;</span>



<span class="n">using</span> <span class="o">(</span><span class="n">PsdImage</span> <span class="n">im</span> <span class="o">=</span> <span class="n">LoadFile</span><span class="o">(</span><span class="n">sourceFileName</span><span class="o">))</span>

<span class="o">{</span>

     <span class="k">this</span><span class="o">.</span><span class="na">SaveForVisualTest</span><span class="o">(</span><span class="n">im</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="na">OutputPath</span><span class="o">,</span> <span class="n">prefix</span> <span class="o">+</span> <span class="n">file</span><span class="o">,</span> <span class="s">&#34;prima&#34;</span><span class="o">);</span>

     <span class="n">var</span> <span class="n">hueLayer</span> <span class="o">=</span> <span class="n">im</span><span class="o">.</span><span class="na">AddHueSaturationAdjustmentLayer</span><span class="o">();</span>

     <span class="n">hueLayer</span><span class="o">.</span><span class="na">Hue</span> <span class="o">=</span> <span class="o">-</span><span class="n">25</span><span class="o">;</span>

     <span class="n">hueLayer</span><span class="o">.</span><span class="na">Saturation</span> <span class="o">=</span> <span class="o">-</span><span class="n">12</span><span class="o">;</span>

     <span class="n">hueLayer</span><span class="o">.</span><span class="na">Lightness</span> <span class="o">=</span> <span class="n">67</span><span class="o">;</span>

     <span class="n">var</span> <span class="n">colorRange</span> <span class="o">=</span> <span class="n">hueLayer</span><span class="o">.</span><span class="na">GetRange</span><span class="o">(</span><span class="n">2</span><span class="o">);</span>

     <span class="n">colorRange</span><span class="o">.</span><span class="na">Hue</span> <span class="o">=</span> <span class="o">-</span><span class="n">160</span><span class="o">;</span>

     <span class="n">colorRange</span><span class="o">.</span><span class="na">Saturation</span> <span class="o">=</span> <span class="n">100</span><span class="o">;</span>

     <span class="n">colorRange</span><span class="o">.</span><span class="na">Lightness</span> <span class="o">=</span> <span class="n">20</span><span class="o">;</span>

     <span class="n">colorRange</span><span class="o">.</span><span class="na">MostLeftBorder</span> <span class="o">=</span> <span class="n">300</span><span class="o">;</span>



     <span class="n">im</span><span class="o">.</span><span class="na">Save</span><span class="o">(</span><span class="n">psdPathAfterChange</span><span class="o">);</span>

<span class="o">}</span></code></pre></div>