Fix cutout glitch in some packed sprites

- Improved performance
(https://github.com/Perfare/AssetStudio/issues/1015)
This commit is contained in:
VaDiM 2023-05-14 16:05:32 +03:00
parent 5944dd8c58
commit 11b9ca37da

View File

@ -130,20 +130,24 @@ namespace AssetStudio
{ {
try 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); 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); 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 triangles = GetTriangles(m_Sprite.m_RD);
var graphicsOptions = new GraphicsOptions 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, pathBuilder.AddLines(p);
AlphaCompositionMode = PixelAlphaCompositionMode.DestOut pathBuilder.CloseFigure();
}; }
var path = pathBuilder.Build();
var options = new DrawingOptions var options = new DrawingOptions
{ {
GraphicsOptions = graphicsOptions GraphicsOptions = new GraphicsOptions
{
Antialias = false,
AlphaCompositionMode = PixelAlphaCompositionMode.DestOut
}
}; };
using (var mask = new Image<Bgra32>(rect.Width, rect.Height, SixLabors.ImageSharp.Color.Black)) using (var mask = new Image<Bgra32>(rect.Width, rect.Height, SixLabors.ImageSharp.Color.Black))
{ {