ImageSettings is a class used to store the settings retrieved from the sprite settings file
示例#1
0
        private void PerformOptimizations(string path, ImageSettings settings, TextWriter cssLowCompatOutput, List <string> imageLocations)
        {
            var spriteInfo = new SpriteInfoBuilder().Build(settings, imageLocations);

            if (spriteInfo.Images.Count > 0)
            {
                GenerateSprite(path, settings, spriteInfo, cssLowCompatOutput);
            }
        }
示例#2
0
        private ImageSettings GetSettings(string path)
        {
            var    settings            = new ImageSettings();
            string settingFileLocation = Path.Combine(path, SettingsFileName);

            if (!File.Exists(settingFileLocation))
            {
                return(settings);
            }

            XmlTextReader settingsData;

            // Open the settings file. If it fails here, we throw an exception since we expect the file to be there and readable.
            using (settingsData = new XmlTextReader(settingFileLocation))
            {
                while (settingsData.Read())
                {
                    if (settingsData.NodeType == XmlNodeType.Element)
                    {
                        string nodeName = settingsData.Name;

                        if (nodeName.Equals("FileFormat", StringComparison.OrdinalIgnoreCase))
                        {
                            settings.Format = settingsData.ReadElementContentAsString().Trim('.');
                        }
                        else if (nodeName.Equals("Quality", StringComparison.OrdinalIgnoreCase))
                        {
                            settings.Quality = settingsData.ReadElementContentAsInt();
                        }
                        else if (nodeName.Equals("MaxSize", StringComparison.OrdinalIgnoreCase))
                        {
                            settings.MaxSize = settingsData.ReadElementContentAsInt();
                        }
                        else if (nodeName.Equals("BackgroundColor", StringComparison.OrdinalIgnoreCase))
                        {
                            string output = settingsData.ReadElementContentAsString();
                            int    temp   = Int32.Parse(output, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
                            settings.BackgroundColor = Color.FromArgb(temp);
                        }
                        else if (nodeName.Equals("Base64Encoding", StringComparison.OrdinalIgnoreCase))
                        {
                            settings.Base64 = settingsData.ReadElementContentAsBoolean();
                        }
                        else if (nodeName.Equals("TileInXAxis", StringComparison.OrdinalIgnoreCase))
                        {
                            settings.TileInXAxis = settingsData.ReadElementContentAsBoolean();
                        }
                    }
                }
            }

            return(settings);
        }
示例#3
0
        private void GenerateSprite(string path, ImageSettings settings, SpriteInfo spriteInfo, TextWriter cssLowCompatOutput)
        {
            using (Bitmap sprite = new Bitmap(spriteInfo.Width, spriteInfo.Height))
            {
                using (Graphics drawingSurface = Graphics.FromImage(sprite))
                {
                    // Set the background to the specs from the settings file
                    drawingSurface.Clear(settings.BackgroundColor);

                    // Make the final sprite and save it
                    foreach (var image in spriteInfo.Images)
                    {
                        drawingSurface.DrawImage(image.Bitmap, new Rectangle(image.Position.XOffset, image.Position.YOffset, image.Bitmap.Width, image.Bitmap.Height));
                        // Add the CSS data
                        GenerateCss(image, settings.Format, cssLowCompatOutput);

                        var hoverImage = image.HoverImage;
                        if (hoverImage != null)
                        {
                            drawingSurface.DrawImage(hoverImage.Bitmap, new Rectangle(hoverImage.Position.XOffset, hoverImage.Position.YOffset, hoverImage.Bitmap.Width, hoverImage.Bitmap.Height));
                        }
                    }

                    // Set the encoder parameters and make the image
                    try
                    {
                        using (EncoderParameters spriteEncoderParameters = new EncoderParameters(1))
                        {
                            spriteEncoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, settings.Quality);

                            // Attempt to save the image to disk with the specified encoder
                            sprite.Save(Path.Combine(path, GenerateSpriteFileName(settings.Format)), GetEncoderInfo(settings.Format), spriteEncoderParameters);
                        }
                    }
                    catch (Exception)
                    {
                        // If errors occur, get the CLI to auto-choose an encoder. Unfortunately this means that the quality settings will be not used.
                        try
                        {
                            sprite.Save(Path.Combine(path, GenerateSpriteFileName(settings.Format)));
                        }
                        catch (Exception)
                        {
                            // If errors occur again, try to save as a png
                            sprite.Save(Path.Combine(path, GenerateSpriteFileName("png")));
                        }
                    }
                }
            }
        }
示例#4
0
        public SpriteInfo Build(ImageSettings settings, List <string> imageLocations)
        {
            _spriteInfo = new SpriteInfo();
            _settings   = settings;
            var imagePairs = new HoverGenerator().Generate(imageLocations);

            int totalImages = 0;

            foreach (var imagePath in imagePairs)
            {
                var imageInfo = new ImageInfo
                {
                    FileName = imagePath.Key,
                    Bitmap   = new Bitmap(imagePath.Key),
                };
                UpdateSizes(imageInfo);
                totalImages++;

                var hoverPath = imagePath.Value;
                if (hoverPath != null)
                {
                    var hoverInfo = new ImageInfo
                    {
                        FileName = hoverPath,
                        Bitmap   = new Bitmap(hoverPath)
                    };

                    UpdateSizes(hoverInfo);
                    totalImages++;
                    imageInfo.HoverImage = hoverInfo;
                }

                _spriteInfo.Images.Add(imageInfo);
            }

            // Create a drawing surface and add the images to it
            // Since we'll be padding each image by 1px later on, we need to increase the sprites's size correspondingly.
            if (settings.TileInXAxis)
            {
                _spriteInfo.Width += totalImages;
            }
            else
            {
                _spriteInfo.Height += totalImages;
            }

            return(_spriteInfo);
        }
示例#5
0
        public SpriteInfo Build(ImageSettings settings, List<string> imageLocations)
        {
            _spriteInfo = new SpriteInfo();
            _settings = settings;
            var imagePairs = new HoverGenerator().Generate(imageLocations);

            int totalImages = 0;
            foreach (var imagePath in imagePairs)
            {
                var imageInfo = new ImageInfo
                {
                    FileName = imagePath.Key,
                    Bitmap = new Bitmap(imagePath.Key),
                };
                UpdateSizes(imageInfo);
                totalImages++;

                var hoverPath = imagePath.Value;
                if (hoverPath != null)
                {
                    var hoverInfo = new ImageInfo
                    {
                        FileName = hoverPath,
                        Bitmap = new Bitmap(hoverPath)
                    };

                    UpdateSizes(hoverInfo);
                    totalImages++;
                    imageInfo.HoverImage = hoverInfo;
                }

                _spriteInfo.Images.Add(imageInfo);
            }

            // Create a drawing surface and add the images to it
            // Since we'll be padding each image by 1px later on, we need to increase the sprites's size correspondingly.
            if (settings.TileInXAxis)
            {
                _spriteInfo.Width += totalImages;
            }
            else
            {
                _spriteInfo.Height += totalImages;
            }

            return _spriteInfo;
        }
示例#6
0
 private void PerformOptimizations(string path, ImageSettings settings, TextWriter cssLowCompatOutput, List<string> imageLocations)
 {
     var spriteInfo = new SpriteInfoBuilder().Build(settings, imageLocations);
     if (spriteInfo.Images.Count > 0)
     {
         GenerateSprite(path, settings, spriteInfo, cssLowCompatOutput);
     }
 }
示例#7
0
        private ImageSettings GetSettings(string path)
        {
            var settings = new ImageSettings();
            string settingFileLocation = Path.Combine(path, SettingsFileName);
            if (!File.Exists(settingFileLocation))
            {
                return settings;
            }

            XmlTextReader settingsData;
            // Open the settings file. If it fails here, we throw an exception since we expect the file to be there and readable.
            using (settingsData = new XmlTextReader(settingFileLocation))
            {
                while (settingsData.Read())
                {
                    if (settingsData.NodeType == XmlNodeType.Element)
                    {
                        string nodeName = settingsData.Name;

                        if (nodeName.Equals("FileFormat", StringComparison.OrdinalIgnoreCase))
                        {
                            settings.Format = settingsData.ReadElementContentAsString().Trim('.');
                        }
                        else if (nodeName.Equals("Quality", StringComparison.OrdinalIgnoreCase))
                        {
                            settings.Quality = settingsData.ReadElementContentAsInt();
                        }
                        else if (nodeName.Equals("MaxSize", StringComparison.OrdinalIgnoreCase))
                        {
                            settings.MaxSize = settingsData.ReadElementContentAsInt();
                        }
                        else if (nodeName.Equals("BackgroundColor", StringComparison.OrdinalIgnoreCase))
                        {
                            string output = settingsData.ReadElementContentAsString();
                            int temp = Int32.Parse(output, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
                            settings.BackgroundColor = Color.FromArgb(temp);
                        }
                        else if (nodeName.Equals("Base64Encoding", StringComparison.OrdinalIgnoreCase))
                        {
                            settings.Base64 = settingsData.ReadElementContentAsBoolean();
                        }
                        else if (nodeName.Equals("TileInXAxis", StringComparison.OrdinalIgnoreCase))
                        {
                            settings.TileInXAxis = settingsData.ReadElementContentAsBoolean();
                        }
                    }
                }
            }

            return settings;
        }
示例#8
0
        private void GenerateSprite(string path, ImageSettings settings, SpriteInfo spriteInfo, TextWriter cssLowCompatOutput)
        {
            using (Bitmap sprite = new Bitmap(spriteInfo.Width, spriteInfo.Height))
            {
                using (Graphics drawingSurface = Graphics.FromImage(sprite))
                {
                    // Set the background to the specs from the settings file
                    drawingSurface.Clear(settings.BackgroundColor);

                    // Make the final sprite and save it
                    foreach (var image in spriteInfo.Images)
                    {
                        drawingSurface.DrawImage(image.Bitmap, new Rectangle(image.Position.XOffset, image.Position.YOffset, image.Bitmap.Width, image.Bitmap.Height));
                        // Add the CSS data
                        GenerateCss(image, settings.Format, cssLowCompatOutput);

                        var hoverImage = image.HoverImage;
                        if (hoverImage != null)
                        {
                            drawingSurface.DrawImage(hoverImage.Bitmap, new Rectangle(hoverImage.Position.XOffset, hoverImage.Position.YOffset, hoverImage.Bitmap.Width, hoverImage.Bitmap.Height));
                        }

                    }

                    // Set the encoder parameters and make the image
                    try
                    {
                        using (EncoderParameters spriteEncoderParameters = new EncoderParameters(1))
                        {
                            spriteEncoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, settings.Quality);

                            // Attempt to save the image to disk with the specified encoder
                            sprite.Save(Path.Combine(path, GenerateSpriteFileName(settings.Format)), GetEncoderInfo(settings.Format), spriteEncoderParameters);
                        }
                    }
                    catch (Exception)
                    {
                        // If errors occur, get the CLI to auto-choose an encoder. Unfortunately this means that the quality settings will be not used.
                        try
                        {
                            sprite.Save(Path.Combine(path, GenerateSpriteFileName(settings.Format)));
                        }
                        catch (Exception)
                        {
                            // If errors occur again, try to save as a png
                            sprite.Save(Path.Combine(path, GenerateSpriteFileName("png")));
                        }
                    }
                }
            }
        }