public static DirectBitmap PVRTCTextureToBitmap(Texture2D texture, byte[] data) { int width = texture.Width; int height = texture.Height; int bitCount = texture.PVRTCBitCount(); DirectBitmap bitmap = new DirectBitmap(width, height); try { PvrtcDecoder.DecompressPVRTC(data, width, height, bitmap.Bits, bitCount == 2); bitmap.Bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY); return(bitmap); } catch { bitmap.Dispose(); throw; } }
public static void Main(string[] args) { if (args.Length < 4) { Console.WriteLine("Format: {path} {width} {height} {2bitMode}"); Console.ReadKey(); return; } string path = args[0]; int width = int.Parse(args[1]); int height = int.Parse(args[2]); bool do2bit = bool.Parse(args[3]); using (DirectBitmap bitmap = new DirectBitmap(width, height)) { byte[] data = File.ReadAllBytes(path); PvrtcDecoder decoder = new PvrtcDecoder(); ConsoleKeyInfo key; Stopwatch stopwatch = new Stopwatch(); do { stopwatch.Start(); decoder.DecompressPVRTC(data, width, height, bitmap.Bits, do2bit); stopwatch.Stop(); Console.WriteLine("Processed " + stopwatch.ElapsedMilliseconds); stopwatch.Reset(); key = Console.ReadKey(); }while (key.Key == ConsoleKey.Spacebar); string dirPath = Path.GetDirectoryName(path); string fileName = Path.GetFileNameWithoutExtension(path); string outPath = Path.Combine(dirPath, fileName + ".png"); bitmap.Bitmap.RotateFlip(System.Drawing.RotateFlipType.RotateNoneFlipY); bitmap.Bitmap.Save(outPath, ImageFormat.Png); } Console.WriteLine("Finished!"); }