Skip to content

Commit

Permalink
Slightly optimized how we detect the transparency type of textures.
Browse files Browse the repository at this point in the history
  • Loading branch information
MeltyPlayer committed May 6, 2024
1 parent 2743c10 commit f3b7fca
Showing 1 changed file with 59 additions and 17 deletions.
76 changes: 59 additions & 17 deletions FinModelUtility/Fin/Fin/src/util/image/ImageUtil.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using fin.image;
using fin.image.formats;

namespace fin.util.image {
public enum ImageTransparencyType {
Expand All @@ -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;
}
}
}
}

0 comments on commit f3b7fca

Please sign in to comment.