diff --git a/PKHeX.Drawing/ImageUtil.cs b/PKHeX.Drawing/ImageUtil.cs index 69708b5eb..a3265568b 100644 --- a/PKHeX.Drawing/ImageUtil.cs +++ b/PKHeX.Drawing/ImageUtil.cs @@ -50,13 +50,13 @@ public static Bitmap ChangeAllColorTo(Image img, Color c) return bmp; } - public static Bitmap ChangeTransparentTo(Image img, Color c, byte trans) + public static Bitmap ChangeTransparentTo(Image img, Color c, byte trans, int start = 0) { var bmp = (Bitmap)img.Clone(); GetBitmapData(bmp, out BitmapData bmpData, out IntPtr ptr, out byte[] data); Marshal.Copy(ptr, data, 0, data.Length); - SetAllTransparencyTo(data, c, trans); + SetAllTransparencyTo(data, c, trans, start); Marshal.Copy(data, 0, ptr, data.Length); bmp.UnlockBits(bmpData); @@ -130,12 +130,12 @@ private static void SetAllTransparencyTo(byte[] data, double trans) data[i + 3] = (byte)(data[i + 3] * trans); } - public static void SetAllTransparencyTo(byte[] data, Color c, byte trans) + public static void SetAllTransparencyTo(byte[] data, Color c, byte trans, int start) { byte R = c.R; byte G = c.G; byte B = c.B; - for (int i = 0; i < data.Length; i += 4) + for (int i = start; i < data.Length; i += 4) { if (data[i + 3] != 0) continue; diff --git a/PKHeX.Drawing/Sprites/SpriteUtil.cs b/PKHeX.Drawing/Sprites/SpriteUtil.cs index df1dfe4d7..caebe4eb3 100644 --- a/PKHeX.Drawing/Sprites/SpriteUtil.cs +++ b/PKHeX.Drawing/Sprites/SpriteUtil.cs @@ -69,10 +69,7 @@ private static Image GetSprite(MysteryGift gift) var img = GetBaseImage(gift); if (SpriteBuilder.ShowEncounterColor) - { - var color = Color.FromArgb(gift.GetType().Name.GetHashCode() * 0x43FD43FD); - img = ImageUtil.ChangeTransparentTo(img, color, 0x3F); - } + img = ApplyStripe(gift, img); if (gift.GiftUsed) img = ImageUtil.ChangeOpacity(img, 0.3); return img; @@ -163,11 +160,7 @@ private static Image GetSprite(PKM pk, SaveFile sav, int box, int slot, bool fla else if (pk.Format >= 8 && pk.Moves.Any(Legal.DummiedMoves_SWSH.Contains)) sprite = ImageUtil.LayerImage(sprite, Resources.hint, 0, FlagIllegalShiftY); if (SpriteBuilder.ShowEncounterColorPKM) - { - var enc = la.EncounterOriginal; - var color = Color.FromArgb(enc.GetType().Name.GetHashCode() * 0x43FD43FD); - sprite = ImageUtil.ChangeTransparentTo(sprite, color, 0x1F); - } + sprite = ApplyStripe(la.EncounterOriginal, sprite); } if (inBox) // in box { @@ -187,6 +180,14 @@ private static Image GetSprite(PKM pk, SaveFile sav, int box, int slot, bool fla return sprite; } + private static Image ApplyStripe(IEncounterTemplate enc, Image img) + { + var index = (enc.GetType().Name.GetHashCode() * 0x43FD43FD); + var color = Color.FromArgb(index); + const int stripeHeight = 4; // from bottom + return ImageUtil.ChangeTransparentTo(img, color, 0x7F, img.Width * 4 * (img.Height - stripeHeight)); + } + private const int MaxSlotCount = 30; // slots in a box private static int SpriteWidth => Spriter.Width; private static int SpriteHeight => Spriter.Height; @@ -240,11 +241,6 @@ public static Image Sprite(this IEncounterTemplate enc) return g.Sprite(); var gender = GetDisplayGender(enc); var img = GetSprite(enc.Species, enc.Form, gender, 0, 0, enc.EggEncounter, enc.IsShiny, enc.Generation); - if (SpriteBuilder.ShowEncounterColor) - { - var color = Color.FromArgb(enc.GetType().Name.GetHashCode() * 0x43FD43FD); - img = ImageUtil.ChangeTransparentTo(img, color, 0x3F); - } if (SpriteBuilder.ShowEncounterBall && enc is IFixedBall {FixedBall: not Ball.None} b) { var ballSprite = GetBallSprite((int)b.FixedBall); @@ -253,8 +249,10 @@ public static Image Sprite(this IEncounterTemplate enc) if (enc is IGigantamax {CanGigantamax: true}) { var gm = Resources.dyna; - return ImageUtil.LayerImage(img, gm, (img.Width - gm.Width) / 2, 0); + img = ImageUtil.LayerImage(img, gm, (img.Width - gm.Width) / 2, 0); } + if (SpriteBuilder.ShowEncounterColor) + img = ApplyStripe(enc, img); return img; }