Exemple #1
0
        static void ArgumentHandlerStexToPngJson(string[] args)
        {
            if (args.Length != 3)
            {
                throw new Exception($"Invalid number of arguments for {args[0]}");
            }

            var sourceRoot = new DirectoryInfo(args[1]);
            var targetRoot = new DirectoryInfo(args[2]);

            // Special cases: exclude known leftovers, etc. (mainly "effect" stuff)
            var stexFiles = sourceRoot.EnumerateFiles("*.stex", SearchOption.AllDirectories)
                            .Where(x => !x.DirectoryName.Contains("effect\\tex") && !x.DirectoryName.Contains("effect_editor"));

            foreach (var stexFile in stexFiles)
            {
                var relativePath = GetRelativePath(stexFile, sourceRoot);

                var outputFileJsonInfo           = new FileInfo(Path.Combine(targetRoot.FullName, relativePath, $"{Path.GetFileNameWithoutExtension(stexFile.FullName)}.json"));
                var outputFilePngOriginalInfo    = new FileInfo(Path.Combine(targetRoot.FullName, relativePath, $"{Path.GetFileNameWithoutExtension(stexFile.FullName)} (Original).png"));
                var outputFilePngTranslationInfo = new FileInfo(Path.Combine(targetRoot.FullName, relativePath, $"{Path.GetFileNameWithoutExtension(stexFile.FullName)} (Translation).png"));

                if (CheckOkayToContinue(outputFileJsonInfo) && CheckOkayToContinue(outputFilePngOriginalInfo) && CheckOkayToContinue(outputFilePngTranslationInfo))
                {
                    Console.WriteLine($"[*] Converting STEX {stexFile.Name} to PNG+JSON...");

                    outputFileJsonInfo.Directory.Create();

                    (Bitmap bitmap, ImageMetadata metadata) = STEXHandler.ImportBinary(stexFile.FullName, relativePath);
                    bitmap.Save(outputFilePngOriginalInfo.FullName, ImageFormat.Png);
                    bitmap.Save(outputFilePngTranslationInfo.FullName, ImageFormat.Png);
                    metadata.SerializeToFile(outputFileJsonInfo.FullName);
                }
            }
        }
Exemple #2
0
        static void ArgumentHandlerPngJsonToStex(string[] args)
        {
            if (args.Length != 3)
            {
                throw new Exception($"Invalid number of arguments for {args[0]}");
            }

            var sourceRoot = new DirectoryInfo(args[1]);
            var targetRoot = new DirectoryInfo(args[2]);

            var jsonFiles = sourceRoot.EnumerateFiles("*.json", SearchOption.AllDirectories);

            foreach (var jsonFile in jsonFiles)
            {
                var metadataFile = jsonFile.FullName.DeserializeFromFile <ImageMetadata>();

                var inputFilePngOriginalInfo    = new FileInfo(Path.Combine(sourceRoot.FullName, Path.GetDirectoryName(metadataFile.RelativePath), $"{Path.GetFileNameWithoutExtension(metadataFile.RelativePath)} (Original).png"));
                var inputFilePngTranslationInfo = new FileInfo(Path.Combine(sourceRoot.FullName, Path.GetDirectoryName(metadataFile.RelativePath), $"{Path.GetFileNameWithoutExtension(metadataFile.RelativePath)} (Translation).png"));

                if (ignoreUntranslatedFiles && ((inputFilePngOriginalInfo.Length == inputFilePngTranslationInfo.Length) && (File.ReadAllBytes(inputFilePngOriginalInfo.FullName).SequenceEqual(File.ReadAllBytes(inputFilePngTranslationInfo.FullName)))))
                {
                    Console.WriteLine($"[-] File {jsonFile.Name} has no translation, skipping...");
                    continue;
                }

                var relativePath   = GetRelativePath(jsonFile, sourceRoot);
                var outputFileInfo = new FileInfo(Path.Combine(targetRoot.FullName, metadataFile.RelativePath));

                if (CheckOkayToContinue(outputFileInfo))
                {
                    Console.WriteLine($"[*] Converting PNG+JSON {jsonFile.Name} to STEX...");

                    if (metadataFile.DataType == ImageHandler.PicaDataType.UnsignedByte && (metadataFile.PixelFormat == ImageHandler.PicaPixelFormat.ETC1RGB8NativeDMP || metadataFile.PixelFormat == ImageHandler.PicaPixelFormat.ETC1AlphaRGB8A4NativeDMP))
                    {
                        Console.WriteLine($"[+] Original STEX was ETC1, encoding to RGBA8 instead...");
                        metadataFile.DataType    = ImageHandler.PicaDataType.UnsignedByte;
                        metadataFile.PixelFormat = ImageHandler.PicaPixelFormat.RGBANativeDMP;
                    }

                    outputFileInfo.Directory.Create();

                    using (var bitmap = Image.FromFile(inputFilePngTranslationInfo.FullName))
                    {
                        STEXHandler.ExportBinary((Bitmap)bitmap, metadataFile, outputFileInfo.FullName);
                    }
                }
            }
        }