From 11b9ca37da4dbdcf41328dd58e467ccb2fc8554e Mon Sep 17 00:00:00 2001 From: VaDiM Date: Sun, 14 May 2023 16:05:32 +0300 Subject: [PATCH] Fix cutout glitch in some packed sprites - Improved performance (https://github.com/Perfare/AssetStudio/issues/1015) --- AssetStudioUtility/SpriteHelper.cs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/AssetStudioUtility/SpriteHelper.cs b/AssetStudioUtility/SpriteHelper.cs index ab3795c..acb35e1 100644 --- a/AssetStudioUtility/SpriteHelper.cs +++ b/AssetStudioUtility/SpriteHelper.cs @@ -130,20 +130,24 @@ namespace AssetStudio { try { - var triangles = GetTriangles(m_Sprite.m_RD); - var polygons = triangles.Select(x => new Polygon(new LinearLineSegment(x.Select(y => new PointF(y.X, y.Y)).ToArray()))).ToArray(); - IPathCollection path = new PathCollection(polygons); var matrix = Matrix3x2.CreateScale(m_Sprite.m_PixelsToUnits); matrix *= Matrix3x2.CreateTranslation(m_Sprite.m_Rect.width * m_Sprite.m_Pivot.X - textureRectOffset.X, m_Sprite.m_Rect.height * m_Sprite.m_Pivot.Y - textureRectOffset.Y); - path = path.Transform(matrix); - var graphicsOptions = new GraphicsOptions + var triangles = GetTriangles(m_Sprite.m_RD); + var points = triangles.Select(x => x.Select(y => new PointF(y.X, y.Y)).ToArray()); + var pathBuilder = new PathBuilder(matrix); + foreach (var p in points) { - Antialias = false, - AlphaCompositionMode = PixelAlphaCompositionMode.DestOut - }; + pathBuilder.AddLines(p); + pathBuilder.CloseFigure(); + } + var path = pathBuilder.Build(); var options = new DrawingOptions { - GraphicsOptions = graphicsOptions + GraphicsOptions = new GraphicsOptions + { + Antialias = false, + AlphaCompositionMode = PixelAlphaCompositionMode.DestOut + } }; using (var mask = new Image(rect.Width, rect.Height, SixLabors.ImageSharp.Color.Black)) {