private async void UploadAvatar(object sender, RoutedEventArgs e) { var picker = new Windows.Storage.Pickers.FileOpenPicker(); picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail; picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary; picker.FileTypeFilter.Add(".jpg"); picker.FileTypeFilter.Add(".jpeg"); picker.FileTypeFilter.Add(".png"); StorageFile file = await picker.PickSingleFileAsync(); if (file != null) { try { ViewModel.AvatarUrl = file.Path; ViewModel.Base64Avatar = "data:" + file.ContentType + ";base64," + Convert.ToBase64String(await ImageParsing.FileToBytes(file)); } // Mainly for rate limit catch { } } }
private static (byte[]?, int, int) GetTexRgbaData(string path, bool fromDisk) { try { if (fromDisk) { var tmp = new TmpTexFile(); using var stream = File.OpenRead(path); using var br = new BinaryReader(stream); tmp.Load(br); return(tmp.RgbaData, tmp.Header.Width, tmp.Header.Height); } var tex = fromDisk ? Dalamud.GameData.GameData.GetFileFromDisk <TexFile>(path) : Dalamud.GameData.GetFile <TexFile>(path); if (tex == null) { return(null, 0, 0); } var rgba = tex.Header.Format == TexFile.TextureFormat.A8R8G8B8 ? ImageParsing.DecodeUncompressedR8G8B8A8(tex.ImageData, tex.Header.Height, tex.Header.Width) : tex.GetRgbaImageData(); return(rgba, tex.Header.Width, tex.Header.Height); } catch (Exception e) { PluginLog.Error($"Could not parse TEX {path} to RGBA:\n{e}"); return(null, 0, 0); } }
private async void UploadAvatar(object sender, RoutedEventArgs e) { var picker = new Windows.Storage.Pickers.FileOpenPicker(); picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail; picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary; picker.FileTypeFilter.Add(".jpg"); picker.FileTypeFilter.Add(".jpeg"); picker.FileTypeFilter.Add(".png"); StorageFile file = await picker.PickSingleFileAsync(); if (file != null) { GuildIconImage.ImageSource = await LoadImage(file); ViewModel.UpdateIcon("data:" + file.ContentType + ";base64," + Convert.ToBase64String(await ImageParsing.FileToBytes(file))); } }
private byte[] ParseToRgba() { return(ParseType switch { ParseType.Unsupported => Array.Empty <byte>(), ParseType.DXT1 => ImageParsing.DecodeDxt1(MipMap(0), Header.Height, Header.Width), ParseType.DXT3 => ImageParsing.DecodeDxt3(MipMap(0), Header.Height, Header.Width), ParseType.DXT5 => ImageParsing.DecodeDxt5(MipMap(0), Header.Height, Header.Width), ParseType.BC4 => ImageParsing.DecodeBc4(MipMap(0), Header.Height, Header.Width), ParseType.BC5 => ImageParsing.DecodeBc5(MipMap(0), Header.Height, Header.Width), ParseType.Greyscale => ImageParsing.DecodeUncompressedGreyscale(MipMap(0), Header.Height, Header.Width), ParseType.R4G4B4A4 => ImageParsing.DecodeUncompressedR4G4B4A4(MipMap(0), Header.Height, Header.Width), ParseType.B4G4R4A4 => ImageParsing.DecodeUncompressedB4G4R4A4(MipMap(0), Header.Height, Header.Width), ParseType.R5G5B5 => ImageParsing.DecodeUncompressedR5G5B5(MipMap(0), Header.Height, Header.Width), ParseType.B5G5R5 => ImageParsing.DecodeUncompressedB5G5R5(MipMap(0), Header.Height, Header.Width), ParseType.R5G6B5 => ImageParsing.DecodeUncompressedR5G6B5(MipMap(0), Header.Height, Header.Width), ParseType.B5G6R5 => ImageParsing.DecodeUncompressedB5G6R5(MipMap(0), Header.Height, Header.Width), ParseType.R5G5B5A1 => ImageParsing.DecodeUncompressedR5G5B5A1(MipMap(0), Header.Height, Header.Width), ParseType.B5G5R5A1 => ImageParsing.DecodeUncompressedB5G5R5A1(MipMap(0), Header.Height, Header.Width), ParseType.R8G8B8 => ImageParsing.DecodeUncompressedR8G8B8(MipMap(0), Header.Height, Header.Width), ParseType.B8G8R8 => ImageParsing.DecodeUncompressedB8G8R8(MipMap(0), Header.Height, Header.Width), ParseType.R8G8B8A8 => _data.Length == Header.Width * Header.Height * 4 ? _data : _data[..(Header.Width * Header.Height * 4)],