public MainWindow() { InitializeComponent(); System.Drawing.Color color = Properties.Settings.Default.BackgroundColor; System.Windows.Media.Color colorMedia = System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B); colorDialog.SelectedColor = colorMedia; chkKeepData.IsChecked = Properties.Settings.Default.KeepData; spriteWindow.ZoomLevel = Properties.Settings.Default.ZoomLevel; spriteWindow.Playing = Properties.Settings.Default.Playing; spriteWindow.SetBackgroundColor(colorMedia); if (spriteWindow.Playing) { btnPlay.Content = "Stop"; } valZoom.Text = (spriteWindow.ZoomLevel * 100).ToString() + "%"; spriteStrip = new SpriteStrip(); sprite = new Sprite(spriteStrip); spriteWindow.SpriteEdited = sprite; }
private bool LoadSpriteStrip(string fileName) { ignoreOriginChange = ignoreBoundingBoxChange = ignoreFrameSpeedChange = true; List <Bitmap> spriteFrames = new List <Bitmap>(); FileInfo fInfo = new FileInfo(fileName); string fileNameNoExt = Path.GetFileNameWithoutExtension(fileName).Replace(' ', '_'); string strip = ""; string spriteName = ""; int frames = 0; strip = ""; if (fInfo.Name.LastIndexOf("strip") > -1) { spriteName = fileNameNoExt.Substring(0, fInfo.Name.LastIndexOf("strip")); spriteName = spriteName.Trim(new char[] { ' ', '-', '_', '.', ',' }); strip = fInfo.Name.Substring(fInfo.Name.LastIndexOf("strip") + 5); bool isDigit = true; int index = 0; int digit; while (isDigit == true) { if (!int.TryParse(strip.Substring(index, 1), out digit)) { isDigit = false; } else { index++; } } strip = strip.Substring(0, index); } else { spriteName = fileNameNoExt; } // Set number of frames frames = 0; int.TryParse(strip, out frames); if (frames == 0) { frames = 1; } Bitmap bm = new Bitmap(fileName); FrameDimension dimension = new FrameDimension(bm.FrameDimensionsList[0]); Bitmap bm_cropped; Rectangle rect; int w = bm.Width / frames; int h = bm.Height; int framesGif = bm.GetFrameCount(dimension); valWidth.Text = w.ToString() + "px"; valHeight.Text = h.ToString() + "px"; if (bm.Width % frames == 0) { // Sprite frames // Animated GIF if (framesGif > 1 && frames <= 1) { for (int i = 0; i < framesGif; i++) { bm.SelectActiveFrame(dimension, i); bm_cropped = (Bitmap)bm.Clone(); spriteFrames.Add(bm_cropped); } frames = framesGif; } // Strips etc. else { for (int i = 0; i < frames; i++) { rect = new Rectangle(i * w, 0, w, h); bm_cropped = (Bitmap)bm.Clone(rect, bm.PixelFormat); spriteFrames.Add(bm_cropped); } } spritePath = fileName; valFrameCount.Text = frames.ToString(); } else { return(false); //logMessage.Comment = "Width / frames mismatch!"; } string configPath = Path.Combine(fInfo.DirectoryName, spriteName + ".xsprite"); if (File.Exists(configPath)) { spriteStrip = IO.LoadClassInstance <SpriteStrip>(configPath); } else { BoundingBox2D bbox = new BoundingBox2D(spriteStrip.BoundingBox.Left, spriteStrip.BoundingBox.Top, spriteStrip.BoundingBox.Right, spriteStrip.BoundingBox.Bottom); Position2D origin = new Position2D(spriteStrip.Origin.X, spriteStrip.Origin.Y); spriteStrip = new SpriteStrip(); if (chkKeepData.IsChecked ?? true) { spriteStrip.BoundingBox = bbox; spriteStrip.Origin = origin; } spriteStrip.Name = spriteName; spriteStrip.FrameCount = frames; spriteStrip.Size.Width = w; spriteStrip.Size.Height = h; spriteStrip.ResetFrameSpeeds(); } sprite.Strip = spriteStrip; spriteWindow.SpriteEdited = sprite; spriteWindow.SetSprite(spriteFrames); spriteWindow.ShowAnchor = -1; populateFrameSpeedList(); populateAnchorList(); updateGUI(); ignoreOriginChange = ignoreBoundingBoxChange = ignoreFrameSpeedChange = false; return(true); }
public static void SaveSpriteStrip(SpriteStrip sprite, string fileName) { XmlElement elemParent, elem1, elem2; // Create an xml document XmlDocument doc = new XmlDocument(); // Create the root element elemParent = doc.CreateElement("XnaContent"); doc.AppendChild(elemParent); // Create the asset element elem1 = doc.CreateElement("Asset"); elemParent.AppendChild(elem1); elem1.SetAttribute("Type", "GamePhase.Graphics.SpriteStrip"); // Set elem1 as the parent element elemParent = elem1; // Name elemParent.AppendChild(doc.CreateElement("Name")).InnerText = sprite.Name; // Origin elem1 = doc.CreateElement("Origin"); elem1.AppendChild(doc.CreateElement("X")).InnerText = sprite.Origin.X.ToString(); elem1.AppendChild(doc.CreateElement("Y")).InnerText = sprite.Origin.Y.ToString(); elemParent.AppendChild(elem1); // Bounding Box elem1 = doc.CreateElement("BoundingBox"); elem1.AppendChild(doc.CreateElement("Left")).InnerText = sprite.BoundingBox.Left.ToString(); elem1.AppendChild(doc.CreateElement("Right")).InnerText = sprite.BoundingBox.Right.ToString(); elem1.AppendChild(doc.CreateElement("Top")).InnerText = sprite.BoundingBox.Top.ToString(); elem1.AppendChild(doc.CreateElement("Bottom")).InnerText = sprite.BoundingBox.Bottom.ToString(); elemParent.AppendChild(elem1); // Size elem1 = doc.CreateElement("Size"); elem1.AppendChild(doc.CreateElement("Width")).InnerText = sprite.Size.Width.ToString(); elem1.AppendChild(doc.CreateElement("Height")).InnerText = sprite.Size.Height.ToString(); elemParent.AppendChild(elem1); // FrameCount elemParent.AppendChild(doc.CreateElement("FrameCount")).InnerText = sprite.FrameCount.ToString(); // AnimationSpeed elemParent.AppendChild(doc.CreateElement("AnimationSpeed")).InnerText = sprite.AnimationSpeed.ToString(); // FrameSpeeds elemParent.AppendChild(doc.CreateElement("FrameSpeeds")).InnerText = String.Join(" ", sprite.FrameSpeeds); // Anchors elem1 = doc.CreateElement("Anchors"); elemParent.AppendChild(elem1); elemParent = elem1; foreach (SpriteAnchor anchor in sprite.Anchors) { elem1 = doc.CreateElement("Item"); elemParent.AppendChild(elem1); elem1.AppendChild(doc.CreateElement("Name")).InnerText = anchor.Name; elem2 = doc.CreateElement("Frames"); elem1.AppendChild(elem2); elem1 = elem2; // Frames foreach (SpriteAnchorFrame frame in anchor.Frames) { elem2 = doc.CreateElement("Item"); elem1.AppendChild(elem2); elem2.AppendChild(doc.CreateElement("X1")).InnerText = frame.X1.ToString(); elem2.AppendChild(doc.CreateElement("Y1")).InnerText = frame.Y1.ToString(); elem2.AppendChild(doc.CreateElement("X2")).InnerText = frame.X2.ToString(); elem2.AppendChild(doc.CreateElement("Y2")).InnerText = frame.Y2.ToString(); elem2.AppendChild(doc.CreateElement("Angle")).InnerText = frame.Angle.ToString(); elem2.AppendChild(doc.CreateElement("Length")).InnerText = frame.Length.ToString(); } } // Save the XML document XmlWriterSettings settings = new XmlWriterSettings(); settings.Encoding = Encoding.GetEncoding("utf-8"); settings.Indent = true; XmlWriter writer = XmlWriter.Create(fileName, settings); doc.Save(writer); }