Exemplo n.º 1
0
        private Bitmap MapColors(Bitmap palette, Bitmap celBitmap)
        {
            var resultBitmap  = new Bitmap(celBitmap.Width, celBitmap.Height, PixelFormat.Format8bppIndexed);
            var resultPalette = resultBitmap.Palette;

            for (int i = 0; i < resultPalette.Entries.Length; i++)
            {
                resultPalette.Entries[i] = Color.FromArgb(0, 0, 0, 0);
            }

            if (_attached)
            {
                for (int i = 1; i < 16; i++) // 16 colors are allowed for attached sprites on the Amiga
                {
                    resultPalette.Entries[i] = palette.Palette.Entries[i];
                }
            }
            else
            {
                var spriteColorIndexOffset = (int.Parse(_definition.SpriteNumber) / 2) * 4;
                for (int i = 1; i < 4; i++)
                {
                    resultPalette.Entries[i] = palette.Palette.Entries[i + spriteColorIndexOffset];
                }
            }

            var transformer = new IndexedTransformer(_definition.File, celBitmap, resultPalette);

            return(transformer.ConvertToIndexed());
        }
        public static Bitmap LoadIndexedBitmap(this string fileName, ColorPalette palette = null)
        {
            Bitmap output;

            if (BitmapCache.TryGetValue(fileName, out output))
            {
                return(output);
            }

            var bitmap = fileName.LoadBitmap();

            if (palette == null)
            {
                if (!SupportedFormats.Contains(bitmap.PixelFormat))
                {
                    throw new ConversionException("Only indexed formats are supported");
                }

                return(bitmap);
            }

            var transformer = new IndexedTransformer(fileName, bitmap, palette);

            output = transformer.ConvertToIndexed();
            BitmapCache.Add(fileName, output);
            return(output);
        }