private async void SolutionEvents_Opened() { foreach (Project project in ProjectHelpers.GetAllProjects()) { if (project.ProjectItems.Count == 0) { continue; } string folder = ProjectHelpers.GetRootFolder(project); Func <string, bool, Task> bundleFunc = new BundleFilesMenu().UpdateBundleAsync; Func <string, bool, Task> spriteFunc = new SpriteImageMenu().UpdateSpriteAsync; foreach (string file in Directory.EnumerateFiles(folder, "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".bundle") || s.EndsWith(".sprite"))) { if (ProjectHelpers.GetProjectItem(file) == null) { continue; } if (file.EndsWith(".bundle", StringComparison.OrdinalIgnoreCase)) { await BundleGenerator.WatchFiles(await BundleDocument.FromFile(file), bundleFunc); } else { await SpriteGenerator.WatchFiles(await SpriteDocument.FromFile(file), spriteFunc); } } } }
public static IEnumerable<SpriteFragment> CreateImage(SpriteDocument sprite, out string imageFile) { imageFile = Path.ChangeExtension(sprite.FileName, sprite.FileExtension); ProjectHelpers.CheckOutFileFromSourceControl(imageFile); Dictionary<string, Image> images = GetImages(sprite); int width = sprite.IsVertical ? images.Values.Max(i => i.Width) : images.Values.Sum(i => i.Width); int height = sprite.IsVertical ? images.Values.Sum(img => img.Height) : images.Values.Max(img => img.Height); List<SpriteFragment> fragments = new List<SpriteFragment>(); using (var bitmap = new Bitmap(width, height)) { using (Graphics canvas = Graphics.FromImage(bitmap)) { if (sprite.IsVertical) Vertical(images, fragments, canvas); else Horizontal(images, fragments, canvas); } bitmap.Save(imageFile, PasteImage.GetImageFormat("." + sprite.FileExtension)); } return fragments; }
public static IEnumerable <SpriteFragment> CreateImage(SpriteDocument sprite, out string imageFile) { imageFile = Path.ChangeExtension(sprite.FileName, sprite.FileExtension); ProjectHelpers.CheckOutFileFromSourceControl(imageFile); Dictionary <string, Image> images = GetImages(sprite); int width = sprite.IsVertical ? images.Values.Max(i => i.Width) : images.Values.Sum(i => i.Width); int height = sprite.IsVertical ? images.Values.Sum(img => img.Height) : images.Values.Max(img => img.Height); List <SpriteFragment> fragments = new List <SpriteFragment>(); using (var bitmap = new Bitmap(width, height)) { using (Graphics canvas = Graphics.FromImage(bitmap)) { if (sprite.IsVertical) { Vertical(images, fragments, canvas); } else { Horizontal(images, fragments, canvas); } } bitmap.Save(imageFile, PasteImage.GetImageFormat("." + sprite.FileExtension)); } return(fragments); }
public static SpriteDocument FromFile(string fileName) { XDocument doc = XDocument.Load(fileName); string root = ProjectHelpers.GetProjectFolder(fileName); string folder = Path.GetDirectoryName(root); var imageFiles = from f in doc.Descendants("file") select ProjectHelpers.ToAbsoluteFilePath(f.Value, root, folder); SpriteDocument sprite = new SpriteDocument(fileName, imageFiles.ToArray()); sprite.Optimize = doc.Descendants("optimize").First().Value.Equals("true", StringComparison.OrdinalIgnoreCase); sprite.IsVertical = doc.Descendants("orientation").First().Value.Equals("vertical", StringComparison.OrdinalIgnoreCase); sprite.FileExtension = doc.Descendants("outputType").First().Value; return sprite; }
public static SpriteDocument FromFile(string fileName) { XDocument doc = XDocument.Load(fileName); string root = ProjectHelpers.GetProjectFolder(fileName); string folder = Path.GetDirectoryName(root); var imageFiles = from f in doc.Descendants("file") select ProjectHelpers.ToAbsoluteFilePath(f.Value, root, folder); SpriteDocument sprite = new SpriteDocument(fileName, imageFiles.ToArray()); sprite.Optimize = doc.Descendants("optimize").First().Value.Equals("true", StringComparison.OrdinalIgnoreCase); sprite.IsVertical = doc.Descendants("orientation").First().Value.Equals("vertical", StringComparison.OrdinalIgnoreCase); sprite.FileExtension = doc.Descendants("outputType").First().Value; return(sprite); }
private static Dictionary<string, Image> GetImages(SpriteDocument sprite) { Dictionary<string, Image> images = new Dictionary<string, Image>(); foreach (string file in sprite.ImageFiles) { Image image = Image.FromFile(file); // Only touch the resolution of the image if it isn't 96. // That way we keep the original image 'as is' in all other cases. if (Math.Round(image.VerticalResolution) != 96F || Math.Round(image.HorizontalResolution) != 96F) image = new Bitmap(image); images.Add(file, image); } return images; }
private async Task GenerateAsync(SpriteDocument sprite) { _dte.StatusBar.Text = "Generating sprite..."; string imageFile; var fragments = SpriteGenerator.CreateImage(sprite, out imageFile); ProjectHelpers.AddFileToActiveProject(sprite.FileName); ProjectHelpers.AddFileToProject(sprite.FileName, imageFile); Export(fragments, imageFile); if (sprite.Optimize) { await new ImageCompressor().CompressFilesAsync(imageFile); } _dte.StatusBar.Text = "Sprite generated"; }
private static Dictionary <string, Image> GetImages(SpriteDocument sprite) { Dictionary <string, Image> images = new Dictionary <string, Image>(); foreach (string file in sprite.ImageFiles) { Image image = Image.FromFile(file); // Only touch the resolution of the image if it isn't 96. // That way we keep the original image 'as is' in all other cases. if (Math.Round(image.VerticalResolution) != 96F || Math.Round(image.HorizontalResolution) != 96F) { image = new Bitmap(image); } images.Add(file, image); } return(images); }
private async Task CreateSprite() { string spriteFile; if (!GetFileName(out spriteFile)) return; try { SpriteDocument doc = new SpriteDocument(spriteFile, _files.ToArray()); doc.Save(); EditorExtensionsPackage.DTE.ItemOperations.OpenFile(spriteFile); await Generate(doc); } catch (Exception ex) { Logger.Log(ex); MessageBox.Show("Error generating the sprite. See output window for details"); _dte.StatusBar.Text = "Sprite was not created"; } }
private async Task UpdateSpriteAsync() { try { await Task.WhenAll(_sprites.Select(async file => { SpriteDocument doc = SpriteDocument.FromFile(file); await GenerateAsync(doc); })); } catch (FileNotFoundException ex) { Logger.Log(ex.Message); MessageBox.Show("The file '" + Path.GetFileName(ex.Message) + "' does not exist"); _dte.StatusBar.Text = "Sprite was not created"; } catch (Exception ex) { Logger.Log(ex); MessageBox.Show("Error generating the sprite. See output window for details"); } }
private async Task CreateSpriteAsync() { string spriteFile; if (!GetFileName(out spriteFile)) { return; } try { SpriteDocument doc = new SpriteDocument(spriteFile, _files.ToArray()); doc.Save(); EditorExtensionsPackage.DTE.ItemOperations.OpenFile(spriteFile); await GenerateAsync(doc); } catch (Exception ex) { Logger.Log(ex); MessageBox.Show("Error generating the sprite. See output window for details"); _dte.StatusBar.Text = "Sprite was not created"; } }
private async Task Generate(SpriteDocument sprite) { _dte.StatusBar.Text = "Generating sprite..."; string imageFile; var fragments = SpriteGenerator.CreateImage(sprite, out imageFile); ProjectHelpers.AddFileToActiveProject(sprite.FileName); ProjectHelpers.AddFileToProject(sprite.FileName, imageFile); Export(fragments, imageFile); if (sprite.Optimize) await new ImageCompressor().CompressFiles(imageFile); _dte.StatusBar.Text = "Sprite generated"; }