Beispiel #1
0
        public override void GetSettings(ProjectModel.Properties headerSettings)
        {
            base.GetSettings(headerSettings);

            headerSettings["DiscardRedundant"] = DiscardRedundantTiles ? "1" : "0";
            headerSettings["ReducePalette"]    = ReducePalette ? "1" : "0";
            headerSettings["ExportPalette"]    = ExportPalette ? "1" : "0";
            headerSettings["ChrType"]          = Type.ToString();
            headerSettings["Palette"]          = SerializePalette(PaletteAssignment);
            if (TilePalettes != null)
            {
                headerSettings["TilePalettes"] = string.Join(":", TilePalettes.Select(SerializePalette));
            }
        }
Beispiel #2
0
        public Bitmap GetReducedImage(Bitmap image)
        {
            var bitmap    = new Bitmap(image.Width, image.Height);
            var tileCount = (image.Width / 8) * (image.Height / 8);

            var basePalette = TilePalettes.OrderByDescending(p => p.Count).First().ToDictionary(k => k.Value, k => k.Key);

            for (var i = 0; i < tileCount; i++)
            {
                // TODO: Reduce redundancy
                var tilePalette = new List <Color>();
                var offset      = i * 8;
                var offsetY     = (offset / image.Width) * 8;
                var offsetX     = (offset % image.Width);
                for (var y = 0; y < 8; y++)
                {
                    for (var x = 0; x < 8; x++)
                    {
                        var color = image.GetPixel(offsetX + x, offsetY + y);
                        if (!tilePalette.Contains(color))
                        {
                            tilePalette.Add(color);
                        }
                    }
                }

                var paletteReference = TilePalettes.FirstOrDefault(p => tilePalette.All(p.ContainsKey));
                if (paletteReference == null)
                {
                    paletteReference = tilePalette.Select((color, index) => new { color, index }).ToDictionary(x => x.color, x => x.index);                                           // If no matching palettes are found, new colors has been added since we generated our reduced palette. Just ignore these
                }
                for (var y = 0; y < 8; y++)
                {
                    for (var x = 0; x < 8; x++)
                    {
                        var color = image.GetPixel(offsetX + x, offsetY + y);
                        bitmap.SetPixel(offsetX + x, offsetY + y, basePalette[paletteReference[color]]);
                    }
                }
            }

            return(bitmap);
        }