static BackgroundTemplate ReadFromXMLDocument(XmlDocument xmlDoc) { BackgroundTemplate newTemplate = new BackgroundTemplate(); XmlNode rootNode = xmlDoc.GetElementsByTagName("BackgroundTemplate")[0]; newTemplate.CanvasWidth = int.Parse(rootNode.Attributes["CanvasWidth"].Value); newTemplate.CanvasHeight = int.Parse(rootNode.Attributes["CanvasHeight"].Value); List <Rect> frameRects = new List <Rect>(); XmlNodeList frameNodes = xmlDoc.GetElementsByTagName("Frame"); foreach (XmlNode frameNode in frameNodes) { Rect newRect = new Rect(); newRect.X = int.Parse(frameNode.Attributes["X"].Value); newRect.Y = int.Parse(frameNode.Attributes["Y"].Value); newRect.Width = int.Parse(frameNode.Attributes["Width"].Value); newRect.Height = int.Parse(frameNode.Attributes["Height"].Value); frameRects.Add(newRect); } newTemplate.FrameRects = frameRects; newTemplate.NumFrames = frameRects.Count; return(newTemplate); }
/// <summary> /// Загружает предустановленные элементы, изображения-фоны и шаблоны фона раскадровки из файлов, описанных в переданном конфигурационном файле в XML-формате (см. ПЗ) /// </summary> /// <param name="fileStream">Поток, содержащий доступный для чтения файл в XML-формате (см. ПЗ)</param> /// <param name="xmlFilePath">Путь к XML-файлу, по которому открыт поток из параметра fileStream (для поддержки относительных путей)</param> /// <returns>Библиотека, содержащая загруженные предустановленные элементы, фоны и шаблоны фона раскадровки</returns> public static PresetLibrary LoadFromXML(FileStream fileStream, string xmlFilePath) { string xmlFolderPath = Path.GetDirectoryName(xmlFilePath); PresetLibrary newLibrary = new PresetLibrary(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileStream); XmlNodeList itemNodes = xmlDoc.GetElementsByTagName("Item"); newLibrary.Items = BitMapImagesFromNodes(itemNodes, xmlFolderPath); XmlNodeList backgroundNodes = xmlDoc.GetElementsByTagName("Background"); newLibrary.Backgrounds = BitMapImagesFromNodes(backgroundNodes, xmlFolderPath); XmlNodeList templateNodes = xmlDoc.GetElementsByTagName("Template"); List <BackgroundTemplate> templates = new List <BackgroundTemplate>(); foreach (XmlNode templateNode in templateNodes) { string filePath = Path.Combine(xmlFolderPath, templateNode.Attributes["Src"].Value); if (filePath != null) { try { BackgroundTemplate newTemplate; using (FileStream templateFileStream = new FileStream(filePath, FileMode.Open)) { newTemplate = BackgroundTemplate.ReadFromXML(templateFileStream); } templates.Add(newTemplate); } catch (Exception) { } } } newLibrary.Tempates = templates; return(newLibrary); }
/// <summary> /// Обрабатывает нажатие пользователем кнопки "Создать", записывает выбранный пользователем шаблон в поле <see cref="SelectedTemplate"/>. В случае успешного завершения данной операции окно закрыватеся /// </summary> /// <param name="sender"></param> /// <param name="eventArgs"></param> private void CreateButton_Click(object sender, RoutedEventArgs eventArgs) { if (Radio1.IsChecked.Value) { SelectedTemplate = PresetTemplates.ElementAt(TemplatesComboBox.SelectedIndex); } else if (Radio2.IsChecked.Value) { try { using (FileStream fs = new FileStream(FilePath.Text, FileMode.Open)) { SelectedTemplate = BackgroundTemplate.ReadFromXML(fs); } } catch (Exception ex) { MessageBox.Show(this, $"При попытке открытия файла произошла ошибка.\r\n\r\n{ex.Message}"); } } }
public BackgroundManager(BackgroundTemplate backgroundTempalte) { CurrentTempalte = backgroundTempalte; }
/// <summary> /// Загружает документ-раскадровку из потока, в котором она доступна для чтения в XML-формате (см. ПЗ) /// </summary> /// <param name="fileStream">Поток, из которого предполагается загрузить документ-раскадровку в XML-формате</param> /// <returns>Документ-раскадровка, загруженная из переданного потока</returns> public static StoryboardDocument LoadFromXML(FileStream fileStream) { StoryboardDocument newDocument = new StoryboardDocument(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileStream); XmlNode templateNode = xmlDoc.GetElementsByTagName("BackgroundTemplate")[0]; newDocument.Template = BackgroundTemplate.ReadFromXML(templateNode.OuterXml); List <ImageSource> frameBackgrounds = new List <ImageSource>(); foreach (XmlNode backgroundNode in xmlDoc.GetElementsByTagName("StoryboardBackground")) { XmlAttribute contentAttr = backgroundNode.Attributes["Content"]; if (contentAttr == null) { frameBackgrounds.Add(null); } else { frameBackgrounds.Add(Base64StringToImageSource(contentAttr.Value)); } } newDocument.FrameBackgrounds = frameBackgrounds; List <ItemTuple> storyboardItems = new List <ItemTuple>(); foreach (XmlNode itemNode in xmlDoc.GetElementsByTagName("StoryboardItem")) { Rect itemRect = new Rect(); itemRect.X = double.Parse(itemNode.Attributes["X"].Value); itemRect.Y = double.Parse(itemNode.Attributes["Y"].Value); itemRect.Width = double.Parse(itemNode.Attributes["Width"].Value); itemRect.Height = double.Parse(itemNode.Attributes["Height"].Value); BitmapImage itemImageSource; XmlAttribute contentAttr = itemNode.Attributes["Content"]; if (contentAttr == null) { itemImageSource = null; } else { itemImageSource = Base64StringToImageSource(contentAttr.Value); } RotateTransform itemTransform = new RotateTransform(); XmlAttribute angleAttr = itemNode.Attributes["Angle"]; if (angleAttr != null) { itemTransform.Angle = double.Parse(angleAttr.Value); } storyboardItems.Add(new ItemTuple(itemRect, itemTransform, itemImageSource)); } newDocument.StoryboardItems = storyboardItems; return(newDocument); }