From f3b7fcae3c6d1cf7a532d4fa08d43f1c9b307231 Mon Sep 17 00:00:00 2001 From: MeltyPlayer Date: Sun, 5 May 2024 22:31:21 -0500 Subject: [PATCH] Slightly optimized how we detect the transparency type of textures. --- .../Fin/Fin/src/util/image/ImageUtil.cs | 76 ++++++++++++++----- 1 file changed, 59 insertions(+), 17 deletions(-) diff --git a/FinModelUtility/Fin/Fin/src/util/image/ImageUtil.cs b/FinModelUtility/Fin/Fin/src/util/image/ImageUtil.cs index 1d7513704..dc057ccd8 100644 --- a/FinModelUtility/Fin/Fin/src/util/image/ImageUtil.cs +++ b/FinModelUtility/Fin/Fin/src/util/image/ImageUtil.cs @@ -1,4 +1,5 @@ using fin.image; +using fin.image.formats; namespace fin.util.image { public enum ImageTransparencyType { @@ -14,27 +15,68 @@ public static ImageTransparencyType GetTransparencyType( return ImageTransparencyType.OPAQUE; } - var transparencyType = ImageTransparencyType.OPAQUE; - image.Access( - getHandler => { - for (var y = 0; y < image.Height; ++y) { - for (var x = 0; x < image.Width; ++x) { - getHandler(x, y, out _, out _, out _, out var a); - switch (a) { - case 0: { - transparencyType = ImageTransparencyType.MASK; - break; - } - case < 255: { - transparencyType = ImageTransparencyType.TRANSPARENT; - return; + switch (image) { + case La16Image la16Image: { + using var imgLock = la16Image.Lock(); + + var transparencyType = ImageTransparencyType.OPAQUE; + foreach (var pixel in imgLock.Pixels) { + switch (pixel.A) { + case 0: { + transparencyType = ImageTransparencyType.MASK; + break; + } + case < 255: { + return ImageTransparencyType.TRANSPARENT; + } + } + } + + return transparencyType; + } + case Rgba32Image rgba32Image: { + using var imgLock = rgba32Image.Lock(); + + var transparencyType = ImageTransparencyType.OPAQUE; + foreach (var pixel in imgLock.Pixels) { + switch (pixel.A) { + case 0: { + transparencyType = ImageTransparencyType.MASK; + break; + } + case < 255: { + return ImageTransparencyType.TRANSPARENT; + } + } + } + + return transparencyType; + } + } + + { + var transparencyType = ImageTransparencyType.OPAQUE; + image.Access( + getHandler => { + for (var y = 0; y < image.Height; ++y) { + for (var x = 0; x < image.Width; ++x) { + getHandler(x, y, out _, out _, out _, out var a); + switch (a) { + case 0: { + transparencyType = ImageTransparencyType.MASK; + break; + } + case < 255: { + transparencyType = ImageTransparencyType.TRANSPARENT; + return; + } } } } - } - }); + }); - return transparencyType; + return transparencyType; + } } } } \ No newline at end of file