Change background coloring to bottom-stripe

This commit is contained in:
Kurt 2021-08-24 16:11:48 -07:00
parent e3fecdf1d5
commit 2a9f3585e5
2 changed files with 17 additions and 19 deletions

View File

@ -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;

View File

@ -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;
}