Base64Sprites.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System;
  2. using System.Text.RegularExpressions;
  3. using UnityEngine;
  4. namespace SongBrowser.UI
  5. {
  6. class Base64Sprites
  7. {
  8. public static Sprite PlaylistIcon;
  9. public static Sprite AddToFavoritesIcon;
  10. public static Sprite RemoveFromFavoritesIcon;
  11. public static Sprite StarFullIcon;
  12. public static Sprite StarEmptyIcon;
  13. public static Sprite DownloadIcon;
  14. public static Sprite SpeedIcon;
  15. public static Sprite GraphIcon;
  16. public static Sprite DeleteIcon;
  17. public static Sprite XIcon;
  18. public static Sprite RandomIcon;
  19. public static Sprite BeastSaberLogo;
  20. public static Sprite DoubleArrow;
  21. public static void Init()
  22. {
  23. SpeedIcon = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.Speed.png");
  24. GraphIcon = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.Graph.png");
  25. XIcon = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.X.png");
  26. AddToFavoritesIcon = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.AddToFavorites.png");
  27. PlaylistIcon = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.PlaylistIcon.png");
  28. RemoveFromFavoritesIcon = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.RemoveFromFavorites.png");
  29. StarFullIcon = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.StarFull.png");
  30. StarEmptyIcon = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.StarEmpty.png");
  31. DownloadIcon = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.DownloadIcon.png");
  32. DeleteIcon = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.DeleteIcon.png");
  33. DoubleArrow = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.DoubleArrow.png");
  34. BeastSaberLogo = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.BeastSaberLogo.png");
  35. RandomIcon = CustomUI.Utilities.UIUtilities.LoadSpriteFromResources("SongBrowser.Assets.RandomIcon.png");
  36. }
  37. public static string SpriteToBase64(Sprite input)
  38. {
  39. return Convert.ToBase64String(input.texture.EncodeToPNG());
  40. }
  41. public static Sprite Base64ToSprite(string base64)
  42. {
  43. // prune base64 encoded image header
  44. Regex r = new Regex(@"data:image.*base64,");
  45. base64 = r.Replace(base64, "");
  46. Sprite s = null;
  47. try
  48. {
  49. Texture2D tex = Base64ToTexture2D(base64);
  50. s = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), (Vector2.one / 2f));
  51. }
  52. catch (Exception)
  53. {
  54. Console.WriteLine("Exception loading texture from base64 data.");
  55. s = null;
  56. }
  57. return s;
  58. }
  59. public static Texture2D Base64ToTexture2D(string encodedData)
  60. {
  61. byte[] imageData = Convert.FromBase64String(encodedData);
  62. int width, height;
  63. GetImageSize(imageData, out width, out height);
  64. Texture2D texture = new Texture2D(width, height, TextureFormat.ARGB32, false, true);
  65. texture.hideFlags = HideFlags.HideAndDontSave;
  66. texture.filterMode = FilterMode.Trilinear;
  67. texture.LoadImage(imageData);
  68. return texture;
  69. }
  70. private static void GetImageSize(byte[] imageData, out int width, out int height)
  71. {
  72. width = ReadInt(imageData, 3 + 15);
  73. height = ReadInt(imageData, 3 + 15 + 2 + 2);
  74. }
  75. private static int ReadInt(byte[] imageData, int offset)
  76. {
  77. return (imageData[offset] << 8) | imageData[offset + 1];
  78. }
  79. }
  80. }