Improve sprite b64 handling

This commit is contained in:
2026-02-11 14:16:59 -07:00
parent f08acbcff7
commit cfca09c75b
4 changed files with 9 additions and 21 deletions

View File

@@ -40,8 +40,10 @@ public class CustomIconLoader : MonoBehaviour
var cachedIcon = BazookaManager.Instance.iconCache.FirstOrDefault(icon => icon.ID == obj.ID);
if (cachedIcon != null)
{
try { Tools.RenderFromBase64(cachedIcon.Data, obj.GetComponent<Image>()); }
catch { Tools.RenderFromBase64(cachedIcon.Data, obj.GetComponent<SpriteRenderer>()); }
if (obj.TryGetComponent<Image>(out var image))
image.sprite = Tools.GetSpriteFromBase64(cachedIcon.Data);
else if (obj.TryGetComponent<SpriteRenderer>(out var spriteRenderer))
image.sprite = Tools.GetSpriteFromBase64(cachedIcon.Data);
}
Destroy(obj);
}

View File

@@ -62,7 +62,7 @@ public class IconMarketplaceUploadIcon : MonoBehaviour
return;
}
birdData = Convert.ToBase64String(fileContent);
Tools.RenderFromBase64(birdData, birdImage);
birdImage.sprite = Tools.GetSpriteFromBase64(birdData);
birdImageNone.SetActive(false);
birdImage.gameObject.SetActive(true);
}

View File

@@ -34,30 +34,16 @@ public static class Tools
statusText.color = color;
}
public static void RenderFromBase64(string base64, Image targetImage)
public static Sprite GetSpriteFromBase64(string base64)
{
byte[] imageData = Convert.FromBase64String(base64);
Texture2D tex = new(2, 2, TextureFormat.ARGB32, false);
if (!tex.LoadImage(imageData)) return;
if (!tex.LoadImage(imageData)) return null;
tex.filterMode = FilterMode.Point;
tex.Apply(false, false);
Sprite sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new UnityEngine.Vector2(0.5f, 0.5f));
targetImage.sprite = sprite;
}
public static void RenderFromBase64(string base64, SpriteRenderer targetImage)
{
byte[] imageData = Convert.FromBase64String(base64);
Texture2D tex = new(2, 2, TextureFormat.ARGB32, false);
if (!tex.LoadImage(imageData)) return;
tex.filterMode = FilterMode.Point;
tex.Apply(false, false);
Sprite sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new UnityEngine.Vector2(0.5f, 0.5f));
targetImage.sprite = sprite;
return Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new UnityEngine.Vector2(0.5f, 0.5f));
}
public static void RefreshHierarchy(GameObject root)