/// <summary> /// Returns the uncompressed image as a bytarray in the 32pppRGBA-Format /// </summary> private byte[] GetImageBytes(int w, int h, byte[] data) { byte[] pic; switch (encoding) { case 1: pic = GetPictureUncompressedByteArray(w, h, data); break; case 2: var flag = (alphaDepth > 1) ? ((alphaEncoding == 7) ? (int)DXTDecompression.DXTFlags.DXT5 : (int)DXTDecompression.DXTFlags.DXT3) : (int)DXTDecompression.DXTFlags.DXT1; pic = DXTDecompression.DecompressImage(w, h, data, flag); break; case 3: pic = data; break; default: pic = new byte[0]; break; } return(pic); }
/// <summary> /// Returns the uncompressed image as a bytarray in the 32pppRGBA-Format /// </summary> private byte[] GetImageBytes(int w, int h, byte[] data) { switch (colorEncoding) { case 1: return(GetPictureUncompressedByteArray(w, h, data)); case 2: DXTDecompression.DXTFlags flag = (alphaDepth > 1) ? ((alphaEncoding == 7) ? DXTDecompression.DXTFlags.DXT5 : DXTDecompression.DXTFlags.DXT3) : DXTDecompression.DXTFlags.DXT1; return(DXTDecompression.DecompressImage(w, h, data, flag)); case 3: return(data); default: return(new byte[0]); } }
/// <summary> /// Returns the uncompressed image as a byte array in the 32pppRGBA-Format /// </summary> private byte[] GetImageBytes(int w, int h, byte[] data) { switch (colorEncoding) { case BlpColorEncoding.Jpeg: { using (var img = SixLabors.ImageSharp.Image.Load <Rgba32>(data)) { if (img.TryGetSinglePixelSpan(out var pixels)) { return(MemoryMarshal.AsBytes(pixels).ToArray()); } throw new Exception("img.TryGetSinglePixelSpan failed"); } //using (var img = SixLabors.ImageSharp.Image.Load<Rgba32>(data)) //{ // var map = img.GetPixelSpan(); // byte[] rgba = new byte[width * height * 4]; // for (int i = 0; i < rgba.Length; i += 4) // { // rgba[i + 0] = map[i / 4].R; // rgba[i + 1] = map[i / 4].G; // rgba[i + 2] = map[i / 4].B; // rgba[i + 3] = map[i / 4].A; // } // return rgba; //} } case BlpColorEncoding.Palette: return(GetPictureUncompressedByteArray(w, h, data)); case BlpColorEncoding.Dxt: DXTDecompression.DXTFlags flag = (alphaSize > 1) ? ((preferredFormat == BlpPixelFormat.Dxt5) ? DXTDecompression.DXTFlags.DXT5 : DXTDecompression.DXTFlags.DXT3) : DXTDecompression.DXTFlags.DXT1; return(DXTDecompression.DecompressImage(w, h, data, flag)); case BlpColorEncoding.Argb8888: return(data); default: return(new byte[0]); } }