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"))); } } } } }
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); }
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; }