コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }