public void DecodeNative() { for (int i = 0; i < 100; i++) { var outputFileName = Path.Combine(_outputDirectory, $"Native.{i}.bmp"); var image = new IndexedImage(_arranger); image.ExportImage(outputFileName, new ImageSharpFileAdapter()); } }
public void ScatteredArranger_Reversibility_CanReverse(ScatteredArranger arranger, string imageFileName) { var exportedImageFileName = $"test.png"; var indexedImage = new IndexedImage(arranger); indexedImage.ImportImage(imageFileName, new ImageSharpFileAdapter(), ColorMatchStrategy.Exact); indexedImage.ExportImage(exportedImageFileName, new ImageSharpFileAdapter()); using var expected = Image <Rgba32> .Load <Rgba32>(imageFileName); using var actual = Image <Rgba32> .Load <Rgba32>(exportedImageFileName); ImageRgba32Assert.AreEqual(expected, actual); }
public static bool ExportArranger(ProjectTree projectTree, string arrangerKey, string projectRoot, bool forceOverwrite) { if (!projectTree.TryGetNode(arrangerKey, out var node)) { Console.WriteLine($"Exporting '{arrangerKey}'...Resource key not found in project"); return(false); } var relativeFile = Path.Combine(projectTree.CreatePaths(node).ToArray()); var exportFileName = Path.Combine(projectRoot, $"{relativeFile}.png"); var arranger = node.Item as ScatteredArranger; Console.Write($"Exporting '{arrangerKey}' to '{exportFileName}'..."); if (!Directory.Exists(Path.GetDirectoryName(exportFileName))) { Directory.CreateDirectory(Path.GetDirectoryName(exportFileName)); } if (File.Exists(exportFileName) && forceOverwrite == false) { Console.WriteLine($"File already exists and was skipped to not overwrite it"); return(false); } if (arranger.ColorType == PixelColorType.Indexed) { var image = new IndexedImage(arranger); image.ExportImage(exportFileName, new ImageSharpFileAdapter()); } else if (arranger.ColorType == PixelColorType.Direct) { var image = new DirectImage(arranger); image.ExportImage(exportFileName, new ImageSharpFileAdapter()); } Console.WriteLine("Completed successfully"); return(true); }
public static async Task <int> Main(string[] args) { if (args.Length != 3) { var executableName = Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location); Console.WriteLine($"{executableName} <Import|Export> <Directory> <ff5.smc>"); return(-1); } var configContents = await File.ReadAllTextAsync("config.json"); var jsonOptions = new JsonSerializerOptions() { PropertyNameCaseInsensitive = true }; jsonOptions.Converters.Add(new HexadecimalJsonConverter()); var config = JsonSerializer.Deserialize <Config>(configContents, jsonOptions); AppAction action; if (string.Equals(args[0], "Import", StringComparison.OrdinalIgnoreCase)) { action = AppAction.Import; } else if (string.Equals(args[0], "Export", StringComparison.OrdinalIgnoreCase)) { action = AppAction.Export; } else { Console.WriteLine($"Unrecognized action {args[0]}"); return(-2); } if (!Directory.Exists(args[1]) && action == AppAction.Import) { Console.WriteLine($"Directory '{args[1]}' does not exist so there are no files to import"); return(-3); } if (!Directory.Exists(args[1]) && action == AppAction.Export) { var info = Directory.CreateDirectory(args[1]); if (info.Exists) { Console.WriteLine($"Created '{args[1]}'"); } } if (!File.Exists(args[2])) { Console.WriteLine($"File '{args[2]}' does not exist"); } if (action == AppAction.Import) { } else if (action == AppAction.Export) { var serializer = new MonsterSerializer(); var monsters = await serializer.DeserializeMonsters(args[2]); int i = 0; foreach (var monster in monsters) { var sprite = await serializer.DeserializeSprite(args[2], monster); var image = new IndexedImage(sprite.Arranger); image.Render(); var path = Path.Combine(args[1], $"Enemy{i:D3}.png"); image.ExportImage(path, new ImageSharpFileAdapter()); sprite.DataFile.Dispose(); i++; } } return(0); }