public bool AddObject(WzObject obj, UndoRedoManager undoRedoMan) { if (CanNodeBeInserted(this, obj.Name)) { TryParseImage(); if (addObjInternal(obj)) { WzNode node = new WzNode(obj); Nodes.Add(node); if (node.Tag is WzImageProperty) { ((WzImageProperty)node.Tag).ParentImage.Changed = true; } undoRedoMan.AddUndoBatch(new System.Collections.Generic.List <UndoRedoAction> { UndoRedoManager.ObjectAdded(this, node) }); node.EnsureVisible(); return(true); } else { Warning.Error("Could not insert property, make sure all types are correct"); return(false); } } else { MessageBox.Show("Cannot insert object \"" + obj.Name + "\" because an object with the same name already exists. Skipping.", "Skipping Object", MessageBoxButtons.OK, MessageBoxIcon.Information); return(false); } }
private bool OpenWzFile(string path, WzMapleVersion encVersion, short version, out WzFile file) { try { WzFile f = new WzFile(path, version, encVersion); wzFiles.Add(f); f.ParseWzFile(); file = f; return(true); } catch (Exception e) { Warning.Error("Error initializing " + Path.GetFileName(path) + " (" + e.Message + ").\r\nCheck that the directory is valid and the file is not in use."); file = null; return(false); } }
public static void ExtractAnimation(WzSubProperty parent, string savePath, bool apng, bool apngFirstFrame) { List <Bitmap> bmpList = new List <Bitmap>(parent.WzProperties.Count); List <int> delayList = new List <int>(parent.WzProperties.Count); Point biggestPng = new Point(0, 0); Point SmallestEmptySpace = new Point(65535, 65535); Point MaximumPngMappingEndingPts = new Point(0, 0); foreach (IWzImageProperty subprop in parent.WzProperties) { if (subprop is WzCanvasProperty) { //WzVectorProperty origin = (WzVectorProperty)subprop["origin"]; WzPngProperty png = ((WzCanvasProperty)subprop).PngProperty; if (png.Height > biggestPng.Y) { biggestPng.Y = png.Height; } if (png.Width > biggestPng.X) { biggestPng.X = png.Width; } } } List <WzCanvasProperty> sortedProps = new List <WzCanvasProperty>(); foreach (IWzImageProperty subprop in parent.WzProperties) { if (subprop is WzCanvasProperty) { sortedProps.Add((WzCanvasProperty)subprop); WzPngProperty png = ((WzCanvasProperty)subprop).PngProperty; WzVectorProperty origin = (WzVectorProperty)subprop["origin"]; Point StartPoints = new Point(biggestPng.X - origin.X.Value, biggestPng.Y - origin.Y.Value); Point PngMapppingEndingPts = new Point(StartPoints.X + png.Width, StartPoints.Y + png.Height); if (StartPoints.X < SmallestEmptySpace.X) { SmallestEmptySpace.X = StartPoints.X; } if (StartPoints.Y < SmallestEmptySpace.Y) { SmallestEmptySpace.Y = StartPoints.Y; } if (PngMapppingEndingPts.X > MaximumPngMappingEndingPts.X) { MaximumPngMappingEndingPts.X = PngMapppingEndingPts.X; } if (PngMapppingEndingPts.Y > MaximumPngMappingEndingPts.Y) { MaximumPngMappingEndingPts.Y = PngMapppingEndingPts.Y; } } } sortedProps.Sort(new Comparison <WzCanvasProperty>(PropertySorter)); /* foreach (IWzImageProperty subprop in parent.WzProperties) * { * if (subprop is WzCanvasProperty) * { * WzCompressedIntProperty delayProp = (WzCompressedIntProperty)subprop["delay"]; * if (delayProp != null) delay = delayProp.Value; * } * }*/ /* Brush bgcolor = null; * switch (toolStripComboBox2.SelectedIndex) * { * case 0: * bgcolor = Brushes.Widthhite; * break; * case 1: * bgcolor = Brushes.Black; * break; * default: * bgcolor = Brushes.Black; * break; * }*/ for (int i = 0; i < sortedProps.Count; i++) { WzCanvasProperty subprop = sortedProps[i]; if (i.ToString() != subprop.Name) { Warning.Error("Something f****d up at animation builder, frame " + i.ToString()); return; } Bitmap bmp = subprop.PngProperty.GetPNG(false); WzVectorProperty origin = (WzVectorProperty)subprop["origin"]; // if (apng) bmpList.Add(OptimizeBitmapTransparent(bmp, origin, biggestPng, SmallestEmptySpace, MaximumPngMappingEndingPts)); /* else * bmpList.Add(OptimizeBitmap(bmp, origin, biggestPng, SmallestEmptySpace, MaximumPngMappingEndingPts, bgcolor));*/ WzCompressedIntProperty delayProp = (WzCompressedIntProperty)subprop["delay"]; int delay = 100; if (delayProp != null) { delay = delayProp.Value; } delayList.Add(delay); //} } if (apng) { //List<Frame> frameList = new List<Frame>(); /* List<int> delayList = new List<int>(); * foreach (TreeNode subnode in parent.Nodes) * { * if (subnode.Tag2 is PNG) * { * TreeNode delayNode = FindNodeInSubnodes(subnode, "delay"); * if (delayNode == null) delayList.Add(0); * else delayList.Add((int)delayNode.Tag2); * } * } * if (delayList.Count != bmp.Count) * { * MessageBox.Show("Weird error, seems like there are more PNGs than delay values"); * return; * }*/ Apng apngBuilder = new Apng(); if (apngFirstFrame) { apngBuilder.AddFrame(new Frame(CreateIncompatibilityFrame(new Size(bmpList[0].Width, bmpList[0].Height)), 1, 1)); } for (int i = 0; i < bmpList.Count; i++) { apngBuilder.AddFrame(new Frame(bmpList[i], getNumByDelay(delayList[i]), getDenByDelay(delayList[i]))); } apngBuilder.WriteApng(savePath, apngFirstFrame, true); //createapng(frameList, savePath); } else { AnimatedGifEncoder gifEncoder = new AnimatedGifEncoder(); for (int i = 0; i < bmpList.Count; i++) { gifEncoder.AddFrame(new GifFrame(bmpList[i]) { Delay = delayList[i] / 10 }); } gifEncoder.WriteToFile(savePath); } }
public static void ExtractAnimation(WzSubProperty parent, string savePath, bool apngFirstFrame) { List <Bitmap> bmpList = new List <Bitmap>(parent.WzProperties.Count); List <int> delayList = new List <int>(parent.WzProperties.Count); Point biggestPng = new Point(0, 0); Point SmallestEmptySpace = new Point(65535, 65535); Point MaximumPngMappingEndingPts = new Point(0, 0); foreach (WzImageProperty subprop in parent.WzProperties) { if (subprop is WzCanvasProperty) { //WzVectorProperty origin = (WzVectorProperty)subprop["origin"]; WzPngProperty png = ((WzCanvasProperty)subprop).PngProperty; if (png.Height > biggestPng.Y) { biggestPng.Y = png.Height; } if (png.Width > biggestPng.X) { biggestPng.X = png.Width; } } } List <WzCanvasProperty> sortedProps = new List <WzCanvasProperty>(); foreach (WzImageProperty subprop in parent.WzProperties) { if (subprop is WzCanvasProperty) { sortedProps.Add((WzCanvasProperty)subprop); WzPngProperty png = ((WzCanvasProperty)subprop).PngProperty; WzVectorProperty origin = (WzVectorProperty)subprop["origin"]; Point StartPoints = new Point(biggestPng.X - origin.X.Value, biggestPng.Y - origin.Y.Value); Point PngMapppingEndingPts = new Point(StartPoints.X + png.Width, StartPoints.Y + png.Height); if (StartPoints.X < SmallestEmptySpace.X) { SmallestEmptySpace.X = StartPoints.X; } if (StartPoints.Y < SmallestEmptySpace.Y) { SmallestEmptySpace.Y = StartPoints.Y; } if (PngMapppingEndingPts.X > MaximumPngMappingEndingPts.X) { MaximumPngMappingEndingPts.X = PngMapppingEndingPts.X; } if (PngMapppingEndingPts.Y > MaximumPngMappingEndingPts.Y) { MaximumPngMappingEndingPts.Y = PngMapppingEndingPts.Y; } } } sortedProps.Sort(new Comparison <WzCanvasProperty>(PropertySorter)); for (int i = 0; i < sortedProps.Count; i++) { WzCanvasProperty subprop = sortedProps[i]; if (i.ToString() != subprop.Name) { Warning.Error(string.Format(Properties.Resources.AnimError, i.ToString())); return; } Bitmap bmp = subprop.PngProperty.GetPNG(false); WzVectorProperty origin = (WzVectorProperty)subprop["origin"]; bmpList.Add(OptimizeBitmapTransparent(bmp, origin, biggestPng, SmallestEmptySpace, MaximumPngMappingEndingPts)); WzIntProperty delayProp = (WzIntProperty)subprop["delay"]; int delay = 100; if (delayProp != null) { delay = delayProp.Value; } delayList.Add(delay); } Apng apngBuilder = new Apng(); if (apngFirstFrame) { apngBuilder.AddFrame(new Frame(CreateIncompatibilityFrame(new Size(bmpList[0].Width, bmpList[0].Height)), 1, 1)); } for (int i = 0; i < bmpList.Count; i++) { apngBuilder.AddFrame(new Frame(bmpList[i], getNumByDelay(delayList[i]), getDenByDelay(delayList[i]))); } apngBuilder.WriteApng(savePath, apngFirstFrame, true); }