ParserHelpers.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System;
  2. using System.Collections.ObjectModel;
  3. using System.Linq;
  4. using System.Windows;
  5. using System.Windows.Media;
  6. using PixiEditor.Models.DataHolders;
  7. using PixiEditor.Models.ImageManipulation;
  8. using PixiEditor.Models.Layers;
  9. namespace PixiEditor.Helpers.Extensions
  10. {
  11. public static class ParserHelpers
  12. {
  13. public static Document ToDocument(this Parser.SerializableDocument serializableDocument)
  14. {
  15. Document document = new Document(serializableDocument.Width, serializableDocument.Height)
  16. {
  17. Layers = serializableDocument.ToLayers(),
  18. Swatches = new ObservableCollection<Color>(serializableDocument.Swatches.Select(x =>
  19. Color.FromArgb(x.Item1, x.Item2, x.Item3, x.Item4)))
  20. };
  21. if (document.Layers.Count > 0)
  22. {
  23. document.SetMainActiveLayer(0);
  24. }
  25. return document;
  26. }
  27. public static ObservableCollection<Layer> ToLayers(this Parser.SerializableDocument serializableDocument)
  28. {
  29. ObservableCollection<Layer> layers = new ObservableCollection<Layer>();
  30. for (int i = 0; i < serializableDocument.Layers.Length; i++)
  31. {
  32. Parser.SerializableLayer serLayer = serializableDocument.Layers[i];
  33. Layer layer =
  34. new Layer(serLayer.Name, BitmapUtils.BytesToWriteableBitmap(serLayer.Width, serLayer.Height, serLayer.BitmapBytes))
  35. {
  36. IsVisible = serLayer.IsVisible,
  37. Offset = new Thickness(serLayer.OffsetX, serLayer.OffsetY, 0, 0),
  38. Opacity = serLayer.Opacity,
  39. MaxHeight = serializableDocument.Height,
  40. MaxWidth = serializableDocument.Width,
  41. };
  42. layers.Add(layer);
  43. }
  44. return layers;
  45. }
  46. public static Parser.SerializableDocument ToSerializable(this Document document)
  47. {
  48. Parser.SerializableDocument serializable = new Parser.SerializableDocument
  49. {
  50. Width = document.Width,
  51. Height = document.Height,
  52. Layers = document.Layers.Select(x => x.ToSerializable()).ToArray(),
  53. Swatches = document.Swatches.Select(x => new Tuple<byte, byte, byte, byte>(x.A, x.R, x.G, x.B)).ToArray()
  54. };
  55. return serializable;
  56. }
  57. public static Parser.SerializableLayer ToSerializable(this Layer layer)
  58. {
  59. Parser.SerializableLayer serializable = new Parser.SerializableLayer
  60. {
  61. Name = layer.Name,
  62. Width = layer.Width,
  63. Height = layer.Height,
  64. BitmapBytes = layer.ConvertBitmapToBytes(),
  65. IsVisible = layer.IsVisible,
  66. OffsetX = (int)layer.Offset.Left,
  67. OffsetY = (int)layer.Offset.Top,
  68. Opacity = layer.Opacity,
  69. MaxWidth = layer.MaxWidth,
  70. MaxHeight = layer.MaxHeight
  71. };
  72. return serializable;
  73. }
  74. }
  75. }