private void Import(ref List <ResourceElement> workingList, Palette_18Bit basePalette, string rootDir, IProgress <int> progress = null) { foreach (string key in Entries.GetKeys()) { if (!int.TryParse(key, out int ikey)) { continue; } ResourceExportEntry entry = Entries[key]; if (ikey >= workingList.Count) { continue; } Bitmap image = new Bitmap(Path.Combine(rootDir, entry.ImagePath)); IPalette pal = basePalette; if (entry.UseOwnPalette == true) { PaletteFile palfile = new PaletteFile(); palfile.ReadFromFile(Path.Combine(rootDir, entry.PalettePath)); pal = palfile.Palette; } if (entry.UsePalette) { workingList[ikey].ImportImageDataAs8Bit(image, pal, entry.UseOwnPalette == false, out int _); } else { workingList[ikey].ImportImageDataAs15Bit(image); } workingList[ikey].FrameSize = entry.FrameSize; workingList[ikey].ImageOffset = entry.ImageOffset; workingList[ikey].Alignment = entry.Alignment; workingList[ikey].ImageHandle = entry.ImageHandle; workingList[ikey].PaletteHandle = entry.PaletteHandle; progress?.Report(ikey); } }
public void Export(Palette_18Bit basePalette, int key, ResourceElement element, string rootDir, string imagePath, string palettePath, IProgress <int> progress = null) { if (element.PaletteType == PaletteType.EMPTY_ENTRY) { return; } ResourceExportEntry expentry = new ResourceExportEntry(); expentry.FrameSize = element.FrameSize; expentry.ImageOffset = element.ImageOffset; expentry.Alignment = element.Alignment; expentry.ImageHandle = element.ImageHandle; expentry.PaletteHandle = element.PaletteHandle; expentry.UsePalette = element.BitsPerPixel == 8; if (expentry.UsePalette) { expentry.UseOwnPalette = element.PaletteHandle != 0; } else { expentry.UseOwnPalette = null; } HousePaletteFile dummy = new HousePaletteFile(); // modify palette to remove unique colors. Palette_15Bit opal = element.Palette?.Clone(); if (element.Palette != null) { element.Palette.MakeSpecialIndicesUnique(out _); } Bitmap image = element.GetBitmap(basePalette, dummy, false, false, -1); if (!Path.IsPathRooted(imagePath)) { imagePath = Path.Combine(rootDir, imagePath); } Directory.CreateDirectory(Path.GetDirectoryName(imagePath)); image.Save(imagePath); expentry.ImagePath = WinAPI.GetRelativePath(rootDir + @"\", imagePath); if (expentry.UseOwnPalette ?? false) { PaletteFile palfile = new PaletteFile(); palfile.Palette.Import(element.Palette); if (!Path.IsPathRooted(palettePath)) { palettePath = Path.Combine(rootDir, palettePath); } Directory.CreateDirectory(Path.GetDirectoryName(palettePath)); palfile.WriteToFile(palettePath); expentry.PalettePath = WinAPI.GetRelativePath(rootDir + @"\", palettePath); } // restore the original palette element.Palette = opal; Entries.Put(key.ToString(), expentry); progress?.Report(key); }