Notas de lanzamiento de Aspose.PSD para .NET 20.2

Clave Resumen Categoría
PSDNET-206 Mejora de la capacidad de representar texto de diferentes colores en la capa de texto Característica
PSDNET-369 Soporte de recurso clbl (El recurso de capa contiene información sobre elementos de recorte de mezcla) Característica
PSDNET-274 Soporte de recurso blwh (El recurso contiene Datos de capa de Ajuste de Blanco y Negro) Característica
PSDNET-230 Capacidad para exportar Grupo de capas a Jpeg/Png/Tiff/Gif/Bmp/Jpeg2000/Psd/Psb/Pdf Característica
PSDNET-372 Soporte de recurso lspf (Contiene configuraciones sobre la configuración de capa protegida) Característica
PSDNET-370 Soporte de recurso infx (Contiene datos sobre la Mezcla de elementos interiores) Característica
PSDNET-251 Refactorización de PsdImage y Layer para cambiar el comportamiento de la Transformación (Tamaño correcto/rotación/recorte para máscaras de capa si transformamos una capa por separado) Mejora
PSDNET-276 En algunas configuraciones de globalización, la imagen raster de AI no se puede abrir Error
PSDNET-194 Después de realizar la operación FlipRotate en la capa, la imagen PSD se vuelve ilegible Error
PSDNET-177. System.ArgumentException durante la carga del archivo PSD Error
PSDNET-249 Después de usar un método de transformación solo para una capa, la capa guardada tiene límites incorrectos o una máscara Error

Cambios en la API pública

APIs agregadas:

  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerMaskDataFull.UserMaskRectangle
  • M:Aspose.PSD.FileFormats.Ai.AiDataSection.ReleaseManagedResources
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerGroup.Width
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerGroup.Height
  • T:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.Reds
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.Yellows
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.Greens
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.Cyans
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.Blues
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.Magentas
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.UseTint
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.BwPresetKind
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.BlackAndWhitePresetFileName
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.TintColor
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.TintColorRed
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.TintColorGreen
  • P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.TintColorBlue
  • T:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.#ctor
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Save(Aspose.PSD.StreamContainer,System.Int32)
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.TypeToolKey
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Length
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Reds
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Yellows
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Greens
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Cyans
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Blues
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Magentas
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.UseTint
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.BwPresetKind
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.BlackAndWhitePresetFileName
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.TintColor
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lr16Resource.#ctor
  • P:Aspose.PSD.Xmp.Types.Derived.RenditionClass.DefinedValues
  • T:Aspose.PSD.AggregateException
  • M:Aspose.PSD.CmykColor.Equals(System.Object)
  • T:Aspose.PSD.CompositeException
  • T:Aspose.PSD.CoreExceptions.IndexOutOFRangeException
  • M:Aspose.PSD.CoreExceptions.IndexOutOFRangeException.#ctor(System.String)
  • M:Aspose.PSD.CoreExceptions.IndexOutOFRangeException.#ctor(System.String,System.Exception)
  • F:Aspose.PSD.FileFormat.Otg
  • T:Aspose.PSD.FileFormats.Jpeg2000.Jpeg2000CustomException
  • T:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.#ctor(System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.#ctor(System.Byte[])
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.Length
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.IsDataStoredDiscretely
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.GetChannelData(System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.GetActiveManager
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.Save(Aspose.PSD.StreamContainer,System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.GetCurveManager
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.TypeToolKey
  • T:Aspose.PSD.ImageOptions.TiffOptionsUtils
  • M:Aspose.PSD.ImageOptions.TiffOptionsUtils.#ctor
  • M:Aspose.PSD.ImageOptions.TiffOptionsUtils.GetValidTagsCount(Aspose.PSD.FileFormats.Tiff.TiffDataType[])
  • P:Aspose.PSD.ImageOptionsBase.ProgressEventHandler
  • P:Aspose.PSD.LoadOptions.ProgressEventHandler
  • M:Aspose.PSD.Matrix.#ctor(Aspose.PSD.Matrix)
  • M:Aspose.PSD.Metered.Equals(System.Object)
  • T:Aspose.PSD.ProgressEventHandler
  • T:Aspose.PSD.ProgressManagement.EventType
  • F:Aspose.PSD.ProgressManagement.EventType.RelativeProgress
  • F:Aspose.PSD.ProgressManagement.EventType.StageChange
  • F:Aspose.PSD.ProgressManagement.EventType.Initialization
  • F:Aspose.PSD.ProgressManagement.EventType.PreProcessing
  • F:Aspose.PSD.ProgressManagement.EventType.Processing
  • F:Aspose.PSD.ProgressManagement.EventType.Finalization
  • T:Aspose.PSD.ProgressManagement.ProgressEventHandlerInfo
  • P:Aspose.PSD.ProgressManagement.ProgressEventHandlerInfo.Description
  • P:Aspose.PSD.ProgressManagement.ProgressEventHandlerInfo.EventType
  • P:Aspose.PSD.ProgressManagement.ProgressEventHandlerInfo.MaxValue
  • P:Aspose.PSD.ProgressManagement.ProgressEventHandlerInfo.Value
  • M:Aspose.PSD.RasterImage.GetSkewAngle
  • M:Aspose.PSD.RasterImage.NormalizeAngle
  • M:Aspose.PSD.RasterImage.NormalizeAngle(System.Boolean,Aspose.PSD.Color)

APIs removidas:

  • M:Aspose.PSD.FileFormats.Ai.AiDataSection.Dispose
  • P:Aspose.PSD.FileFormats.Ai.AiRasterImageSection.ImageRectangle
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lr16Resource.#ctor(System.Int32)
  • F:Aspose.PSD.Xmp.Types.Derived.RenditionClass.DefinedValues

Ejemplos de uso:

PSDNET-206. Mejora de la capacidad de representar texto de diferentes colores en la capa de texto

  using (var psdImage = (PsdImage)Image.Load("texto_ethalon_diferentes_colores.psd"))

{

    var capaTexto = (TextLayer)psdImage.Layers[1];

    capaTexto.TextData.UpdateLayerData();

    psdImage.Save("salida.png", new PngOptions());

}

PSDNET-369. Soporte de recurso clbl (El recurso de capa contiene información sobre elementos de recorte de mezcla)

        void AssertIsTrue(bool condición, string mensaje)

        {

            if (!condición)

            {

                throw new FormatException(mensaje);

            }

        }

        string nombreArchivoFuente = "MuestraParaRecurso.psd";

        string nombreArchivoDestino = "Salida" + nombreArchivoFuente;

        ClblResource ObtenerRecursoClbl(PsdImage im)

        {

            foreach (var capa in im.Layers)

            {

                foreach (var recursoCapa in capa.Resources)

                {

                    if (recursoCapa is ClblResource)

                    {

                        return (ClblResource)recursoCapa;

                    }

                }

            }

            throw new Exception("No se encontró el recurso Clbl especificado");

        }

        using (PsdImage im = (PsdImage)Image.Load(nombreArchivoFuente))

        {

            var recurso = ObtenerRecursoClbl(im);

            AssertIsTrue(recurso.BlendClippedElements, "El ClblResource.BlendClippedElements debería ser verdadero");

            // Prueba de edición y guardado

            recurso.BlendClippedElements = false;

            im.Save(nombreArchivoDestino);

        }

        using (PsdImage im = (PsdImage)Image.Load(nombreArchivoDestino))

        {

            var recurso = ObtenerRecursoClbl(im);

            AssertIsTrue(!recurso.BlendClippedElements, "El ClblResource.BlendClippedElements debería cambiar a falso");

        }

PSDNET-274. Soporte de recurso blwh (El recurso contiene Datos de capa de Ajuste de Blanco y Negro)

         const string MensajeValorEsperadoErroneo = "El valor de propiedad esperado no es igual al valor actual";

        void AssertIsTrue(bool condición, string mensaje)

        {

            if (!condición)

            {

                throw new FormatException(mensaje);

            }

        }

        void EjemploSoporteDeRecursoBlwh(

            string nombreArchivoFuente,

            int rojos,

            int amarillos,

            int verdes,

            int cianos,

            int azules,

            int magentas,

            bool usarTinte,

            int tipoBwPreset,

            string nombreArchivoPresetBw,

            double tinteRojo,

            double tinteVerde,

            double tinteAzul,

            int tinte,

            int nuevoTinte)

        {

            string nombreArchivoDestino = "Salida" + nombreArchivoFuente;

            bool seEncontróRecursoRequerido = false;

            using (PsdImage im = (PsdImage)Image.Load(nombreArchivoFuente))

            {

                foreach (var capa in im.Layers)

                {

                    foreach (var recursoCapa in capa.Resources)

                    {

                        if (recursoCapa is BlwhResource)

                        {

                            var recursoBlwh = (BlwhResource)recursoCapa;

                            var capaBlwh = (BlackWhiteAdjustmentLayer)capa;

                            seEncontróRecursoRequerido = true;

                            AssertIsTrue(recursoBlwh.Reds == rojos, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.Yellows == amarillos, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.Greens == verdes, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.Cyans == cianos, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.Blues == azules, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.Magentas == magentas, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.UseTint == usarTinte, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.TintColor == tinte, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.BwPresetKind == tipoBwPreset, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.BlackAndWhitePresetFileName == nombreArchivoPresetBw, MensajeValorEsperadoErroneo);

                            AssertIsTrue(Math.Abs(capaBlwh.TintColorRed - tinteRojo) < 1e-6, MensajeValorEsperadoErroneo);

                            AssertIsTrue(Math.Abs(capaBlwh.TintColorGreen - tinteVerde) < 1e-6, MensajeValorEsperadoErroneo);

                            AssertIsTrue(Math.Abs(capaBlwh.TintColorBlue - tinteAzul) < 1e-6, MensajeValorEsperadoErroneo);

                            // Prueba de edición y guardado

                            recursoBlwh.Reds = rojos - 15;

                            recursoBlwh.Yellows = amarillos - 15;

                            recursoBlwh.Greens = verdes + 15;

                            recursoBlwh.Cyans = cianos + 15;

                            recursoBlwh.Blues = azules - 15;

                            recursoBlwh.Magentas = magentas - 15;

                            recursoBlwh.UseTint = !usarTinte;

                            recursoBlwh.BwPresetKind = 4;

                            recursoBlwh.BlackAndWhitePresetFileName = "nombrePresetBw";

                            capaBlwh.TintColorRed = tinteRojo - 60;

                            capaBlwh.TintColorGreen = tinteVerde - 60;

                            capaBlwh.TintColorBlue = tinteAzul - 60;

                            im.Save(nombreArchivoDestino);

                            break;

                        }

                    }

                }

            }

            AssertIsTrue(seEncontróRecursoRequerido, "No se encontró el recurso Blwh especificado");

            seEncontróRecursoRequerido = false;

            using (PsdImage im = (PsdImage)Image.Load(nombreArchivoDestino))

            {

                foreach (var capa in im.Layers)

                {

                    foreach (var recursoCapa in capa.Resources)

                    {

                        if (recursoCapa is BlwhResource)

                        {

                            var recursoBlwh = (BlwhResource)recursoCapa;

                            var capaBlwh = (BlackWhiteAdjustmentLayer)capa;

                            seEncontróRecursoRequerido = true;

                            AssertIsTrue(recursoBlwh.Reds == rojos - 15, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.Yellows == amarillos - 15, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.Greens == verdes + 15, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.Cyans == cianos + 15, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.Blues == azules - 15, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.Magentas == magentas - 15, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.UseTint == !usarTinte, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.TintColor == nuevoTinte, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.BwPresetKind == 4, MensajeValorEsperadoErroneo);

                            AssertIsTrue(recursoBlwh.BlackAndWhitePresetFileName == "nombrePresetBw", MensajeValorEsperadoErroneo);

                            AssertIsTrue(Math.Abs(capaBlaBlwh.TintColorRed - tinteRojo + 60) < 1e-6, MensajeValorEsperadoErroneo);

                            AssertIsTrue(Math.Abs(capaBlwh.TintColorGreen - tinteVerde + 60) < 1e-6, MensajeValorEsperadoErroneo);

                            AssertIsTrue(Math.Abs(capaBlwh.TintColorBlue - tinteAzul + 60) < 1e-6, MensajeValorEsperadoErroneo);

                            break;

                        }

                    }

                }

            }

            AssertIsTrue(seEncontróRecursoRequerido, "No se encontró el recurso Blwh especificado");

        }

        EjemploSoporteDeRecursoBlwh(

            "CapaAjusteBlancoNegroRayasMáscara.psd",

            0x28,

            0x3c,

            0x28,

            0x3c,

            0x14,

            0x50,

            false,

            1,

            "\0",

            225.00045776367188,

            211.00067138671875,

            179.00115966796875,

            -1977421,

            -5925001);

        EjemploSoporteDeRecursoBlwh(

            "CapaAjusteBlancoNegroRayasMáscara2.psd",

            0x80,

            0x40,

            0x20,

            0x10,

            0x08,

            0x04,

            true,

            4,

            "\0",

            239.996337890625,

            127.998046875,

            63.9990234375,

            -1015744,

            -4963324);

        Console.WriteLine("La actualización de BlwhResource funciona como se espera. Presione cualquier tecla.");

PSDNET-230. Capacidad para exportar Grupo de capas a Jpeg/Png/Tiff/Gif/Bmp/Jpeg2000/Psd/Psb/Pdf

  using (var psdImage = (PsdImage)Image.Load("1.psd"))

            {

                // carpeta con fondo

                LayerGroup carpetaFondo = (LayerGroup)psdImage.Layers[0];

                // carpeta con contenido

                LayerGroup carpetaContenido = (LayerGroup)psdImage.Layers[4];

                carpetaFondo.Save("fondo.png", new PngOptions());

                carpetaContenido.Save("contenido.png", new PngOptions());

            }

 PSDNET-372. Soporte de recurso lspf (Contiene configuraciones sobre la configuración de capa protegida)

         const string MensajeValorEsperadoErroneo = "El valor de propiedad esperado no es igual al valor actual";

        void AssertIsTrue(bool condición, string mensaje)

        {

            if (!condición)

            {

                throw new FormatException(mensaje);

            }

        }

        string nombreArchivoFuente = "MuestraParaRecurso.psd";

        string nombreArchivoDestino = "Salida" + nombreArchivoFuente;

        bool seEncontróRecursoRequerido = false;

        using (PsdImage im = (PsdImage)Image.Load(nombreArchivoFuente))

        {

            foreach (var capa in im.Layers)

            {

                foreach (var recursoCapa in capa.Resources)

                {

                    if (recursoCapa is LspfResource)

                    {

                        var recurso = (LspfResource)recursoCapa;

                        seEncontróRecursoRequerido = true;

                        AssertIsTrue(false == recurso.IsCompositeProtected, MensajeValorEsperadoErroneo);

                        AssertIsTrue(false == recurso.IsPositionProtected, MensajeValorEsperadoErroneo);

                        AssertIsTrue(false == recurso.IsTransparencyProtected, MensajeValorEsperadoErroneo);

                        // Prueba de edición y guardado

                        recurso.IsCompositeProtected = true;

                        AssertIsTrue(true == recurso.IsCompositeProtected, MensajeValorEsperadoErroneo);

                        AssertIsTrue(false == recurso.IsPositionProtected, MensajeValorEsperadoErroneo);

                        AssertIsTrue(false == recurso.IsTransparencyProtected, MensajeValorEsperadoErroneo);

                        recurso.IsCompositeProtected = false;

                        recurso.IsPositionProtected = true;

                        AssertIsTrue(false == recurso.IsCompositeProtected, MensajeValorEsperadoErroneo);

                        AssertIsTrue(true == recurso.IsPositionProtected, MensajeValorEsperadoErroneo);

                        AssertIsTrue(false == recurso.IsTransparencyProtected, MensajeValorEsperadoErroneo);

                        recurso.IsPositionProtected = false;

                        recurso.IsTransparencyProtected = true;

                        AssertIsTrue(false == recurso.IsCompositeProtected, MensajeValorEsperadoErroneo);

                        AssertIsTrue(false == recurso.IsPositionProtected, MensajeValorEsperadoErroneo);

                        AssertIsTrue(true == recurso.IsTransparencyProtected, MensajeValorEsperadoErroneo);

                        recurso.IsCompositeProtected = true;

                        recurso.IsPositionProtected = true;

                        recurso.IsTransparencyProtected = true;

                        im.Save(nombreArchivoDestino);

                        break;

                    }

                }

            }

        }

        AssertIsTrue(seEncontróRecursoRequerido, "No se encontró el recurso Lspf especificado");

        seEncontróRecursoRequerido = false;

        using (PsdImage im = (PsdImage)Image.Load(nombreArchivoDestino))

        {

            foreach (var capa in im.Layers)

            {

                foreach (var recursoCapa in capa.Resources)

                {

                    if (recursoCapa is LspfResource)

                    {

                        var recurso = (LspfResource)recursoCapa;

                        seEncontróRecursoRequerido = true;

                        AssertIsTrue(recurso.IsCompositeProtected, MensajeValorEsperadoErroneo);

                        AssertIsTrue(recurso.IsPositionProtected, MensajeValorEsperadoErroneo);

                        AssertIsTrue(recurso.IsTransparencyProtected, MensajeValorEsperadoErroneo);

                        break;

                    }

                }

            }

        }

        AssertIsTrue(seEncontróRecursoRequerido, "No se encontró el recurso Lspf especificado");

        Console.WriteLine("La actualización de LspfResource funciona como se espera. Presione cualquier tecla.");

 PSDNET-370. Soporte de recurso infx (Contiene datos sobre la Mezcla de elementos interiores)

         void AssertIsTrue(bool condición, string mensaje)

        {

            if (!condición)

            {

                throw new FormatException(mensaje);

            }

        }

        string nombreArchivoFuente = "MuestraParaRecurso.psd";

        string nombreArchivoDestino = "Salida" + nombreArchivoFuente;

        bool seEncontróRecursoRequerido = false;

        using (PsdImage im = (PsdImage)Image.Load(nombreArchivoFuente))

        {

            foreach (var capa in im.Layers)

            {

                foreach (var recursoCapa in capa.Resources)

                {

                    if (recursoCapa is InfxResource)

                    {

                        var recurso = (InfxResource)recursoCapa;

                        seEncontróRecursoRequerido = true;

                        AssertIsTrue(!recurso.BlendInteriorElements, "El InfxResource.BlendInteriorElements debería ser falso");

                        // Prueba de edición y guardado

                        recurso.BlendInteriorElements = true;

                        im.Save(nombreArchivoDestino);

                        break;

                    }

                }

            }

        }

        AssertIsTrue(seEncontróRecursoRequerido, "No se encontró el recurso Infx especificado");

        seEncontróRecursoRequerido = false;

        using (PsdImage im = (PsdImage)Image.Load(nombreArchivoDestino))

        {

            foreach (var capa in im.Layers)

            {

                foreach (var recursoCapa in capa.Resources)

                {

                    if (recursoCapa is InfxResource)

                    {

                        var recurso = (InfxResource)recursoCapa;

                        seEncontróRecursoRequerido = true;

                        AssertIsTrue(recurso.BlendInteriorElements, "El InfxResource.BlendInteriorElements debería cambiar a verdadero");

                        break;

                    }

                }

            }

        }

        AssertIsTrue(seEncontróRecursoRequerido, "No se encontró el recurso Infx especificado");

PSDNET-251. Refactorización de PsdImage y Layer para cambiar el comportamiento de la Transformación (Tamaño correcto/rotación/recorte para máscaras de capa si transformamos una capa por separado)

             var enums = (RotateFlipType[])Enum.GetValues(typeof(RotateFlipType));

            var fileNames = new string[]

            {

                "UnaRegularYUnaAjusteConVectorYMáscaraDeCapa",

                "UnaRegularYUnaAjusteConMáscaraDeCapa", 

                "CapaTexto",

                "FormasVinculadasConTexto"

            };

            foreach (string nombreArchivo in fileNames)

            {

                foreach (RotateFlipType rotateFlipType in enums)

                {

                    string nombreArchivoFuente = nombreArchivo + ".psd";

                    string nombreArchivoDestino = nombreArchivo + "_" + rotateFlipType;

                    var psdLoadOptions = new PsdLoadOptions() { LoadEffectsResource = true };

                    using (PsdImage imagen = (PsdImage)Image.Load(nombreArchivoFuente, psdLoadOptions))

                    {

                        imagen.RotateFlip(rotateFlipType);

                        imagen.Save(nombreArchivoDestino);

                    }

                }

            }

PSDNET-276. En algunas configuraciones de globalización, la imagen raster de AI no se puede abrir

        string nombreArchivoFuente = "formulario_raster_8.ai";

        System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ru_RU");

        System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture;

        using (AiImage imagen = (AiImage)Image.Load(nombreArchivoFuente))

        {

            // no debería lanzarse ninguna excepción

        }

PSDNET-194. Después de realizar la operación FlipRotate en la capa, la imagen PSD se vuelve ilegible

             string nombreArchivoFuente = GetFileInCustomFolderRelativeToBase(@"testdata\Issues\IMAGINGNET-2617\1.psd");

            var tipoFlip = RotateFlipType.Rotate90FlipNone;

            var nombreArchivoSalidaPsd = this.GetFileInOutputFolder("PruebaRotarVoltear2617.psd");

            try

            {

                using (PsdImage imagen = (PsdImage)Image.Load(nombreArchivoFuente))

                {

                    for (int i = 0; i < imagen.Layers.Length; i++)

                    {

                        var capa = imagen.Layers[i];

                        if (!capa.Bounds.IsEmpty)

                        {

                            capa.RotateFlip(tipoFlip);

                        }

                    }

                    string nombreArchivoSalidaPng = this.GetFileInOutputFolder("PruebaRotarVoltear2617.png");

                    imagen.Save(nombreArchivoSalidaPsd);

                }

            // Aquí obtenemos una excepción. Para Photoshop este archivo también es ilegible,

            using (PsdImage imagen = (PsdImage)Image.Load(nombreArchivoSalidaPsd)) // Lanza una excepción

            {

                // No hacer nada

            }

PSDNET-177. System.ArgumentException durante la carga del archivo PSD

         string rutaFuente = "1.psd";

        string rutaPsd = "PruebaRotarVoltear2617.psd";

        RotateFlipType tipoVolteo = RotateFlipType.Rotate270FlipXY;

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

        {

            im.RotateFlip(tipoVolteo);

            im.Save(rutaPsd);

        }

        using (var im = (PsdImage)(Image.Load(rutaPsd))) // Aquí no deberíamos obtener excepciones

        {

            // no hacer nada

        }

PSDNET-249. Después de usar un método de transformación solo para una capa, la capa guardada tiene límites incorrectos o una máscara

         void AssertIsTrue(bool condición, string mensaje)

        {

            if (!condición)

            {

                throw new FormatException(mensaje);

            }

        }

        const double Tolerancia = 1e-6;

        int nuevoAncho = 132;

        int nuevaAltura = 247;

        double xEscala = nuevoAncho / 48.0;

        double yEscala = nuevaAltura / 19.0;

        string nombreArchivoFuente = "CapaTexto.psd";

        string nombreArchivoSalida = "CapaTextoRedimensionar" + nuevoAncho + "_" + nuevaAltura;

        var psdLoadOptions = new PsdLoadOptions() { LoadEffectsResource = true };

        using (PsdImage imagen = (PsdImage) Image.Load(nombreArchivoFuente, psdLoadOptions))

        {

            var capa = imagen.Layers[1] as TextLayer;

            var nuevoIzquierda = capa.Izquierda - (nuevoAncho - capa.Ancho) / 2;

            var nuevoArriba = capa.Arriba - (nuevaAltura - capa.Altura) / 2;

            capa.Redimensionar(nuevoAncho, nuevaAltura);

            AssertIsTrue(capa.Izquierda == nuevoIzquierda, "La propiedad Izquierda de la capa debería ser " + nuevoIzquierda);

            AssertIsTrue(capa.Arriba == nuevoArriba, "La propiedad Arriba de la capa debería ser " + nuevoArriba);

            AssertIsTrue(capa.Ancho == nuevoAncho, "La propiedad Ancho de la capa debería ser " + nuevoAncho);

            AssertIsTrue(capa.Altura == nuevaAltura, "La propiedad Altura de la capa debería ser " + nuevaAltura);

            AssertIsTrue(Math.Abs(capa.MatrizTransformación[0] - xEscala) <= Tolerancia, "La propiedad MatrizTransformación[0] de la capa debería ser " + xEscala);

            AssertIsTrue(Math.Abs(capa.MatrizTransformación[3] - yEscala) <= Tolerancia, "La propiedad MatrizTransformación[3] de la capa debería ser " + yEscala);

            AssertIsTrue(Math.Abs(capa.MatrizTransformación[4] - nuevoIzquierda) <= Tolerancia, "La propiedad MatrizTransformación[4] de la capa debería ser " + nuevoIzquierda);

            AssertIsTrue(Math.Abs(capa.MatrizTransformación[5] - nuevoArriba) <= Tolerancia, "La propiedad MatrizTransformación[5] de la capa debería ser " + nuevoArriba);

            imagen.Save(nombreArchivoSalida + ".psd", new PsdOptions());

            imagen.Save(nombreArchivoSalida + ".png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });

        }