ChunkyImageTests.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using ChunkyImageLib;
  2. using ChunkyImageLib.DataHolders;
  3. using Drawie.Backend.Core.Bridge;
  4. using Drawie.Backend.Core.ColorsImpl;
  5. using Drawie.Backend.Core.Surfaces;
  6. using Drawie.Backend.Core.Surfaces.ImageData;
  7. using Drawie.Numerics;
  8. using Drawie.Skia;
  9. using Xunit;
  10. namespace ChunkyImageLibTest;
  11. public class ChunkyImageTests
  12. {
  13. public ChunkyImageTests()
  14. {
  15. try
  16. {
  17. DrawingBackendApi.SetupBackend(new SkiaDrawingBackend(), null);
  18. }
  19. catch
  20. {
  21. }
  22. }
  23. [Fact]
  24. public void Dispose_ComplexImage_ReturnsAllChunks()
  25. {
  26. ChunkyImage image = new ChunkyImage(new VecI(ChunkyImage.FullChunkSize, ChunkyImage.FullChunkSize),
  27. ColorSpace.CreateSrgb());
  28. image.EnqueueDrawRectangle(new(new(5, 5), new(80, 80), 0, 0, 2, Colors.AliceBlue, Colors.Snow));
  29. using (Chunk target = Chunk.Create(ColorSpace.CreateSrgb()))
  30. {
  31. image.DrawMostUpToDateChunkOn(new(0, 0), ChunkResolution.Full, target.Surface.DrawingSurface, VecI.Zero);
  32. image.CancelChanges();
  33. image.EnqueueResize(new(ChunkyImage.FullChunkSize * 4, ChunkyImage.FullChunkSize * 4));
  34. image.EnqueueDrawRectangle(new(VecD.Zero, image.CommittedSize, 0, 0, 2, Colors.AliceBlue, Colors.Snow,
  35. BlendMode.Multiply));
  36. image.CommitChanges();
  37. image.SetBlendMode(BlendMode.Overlay);
  38. image.EnqueueDrawRectangle(new(VecD.Zero, image.CommittedSize, 0, 0, 2, Colors.AliceBlue, Colors.Snow,
  39. BlendMode.Multiply));
  40. image.EnqueueDrawRectangle(new(VecD.Zero, image.CommittedSize, 0, 0, 2, Colors.AliceBlue, Colors.Snow));
  41. image.CommitChanges();
  42. image.SetBlendMode(BlendMode.Screen);
  43. image.EnqueueDrawRectangle(new(VecD.Zero, image.CommittedSize, 0, 0, 2, Colors.AliceBlue, Colors.Snow));
  44. image.CancelChanges();
  45. image.SetBlendMode(BlendMode.SrcOver);
  46. image.EnqueueDrawRectangle(new(VecD.Zero, image.CommittedSize, 0, 0, 2, Colors.AliceBlue, Colors.Snow));
  47. }
  48. image.Dispose();
  49. Assert.Equal(0, Chunk.ChunkCounter);
  50. }
  51. [Fact]
  52. public void GetCommittedPixel_RedImage_ReturnsRedPixel()
  53. {
  54. const int chunkSize = ChunkyImage.FullChunkSize;
  55. ChunkyImage image = new ChunkyImage(new VecI(chunkSize * 2), ColorSpace.CreateSrgb());
  56. image.EnqueueDrawRectangle
  57. (new ShapeData(new VecD(chunkSize), new VecD(chunkSize * 2), 0, 0, 0, Colors.Transparent, Colors.Red));
  58. image.CommitChanges();
  59. Assert.Equal(Colors.Red, image.GetCommittedPixel(new VecI(chunkSize + chunkSize / 2)));
  60. image.Dispose();
  61. Assert.Equal(0, Chunk.ChunkCounter);
  62. }
  63. [Fact]
  64. public void GetMostUpToDatePixel_BlendModeSrc_ReturnsCorrectPixel()
  65. {
  66. const int chunkSize = ChunkyImage.FullChunkSize;
  67. ChunkyImage image = new ChunkyImage(new VecI(chunkSize * 2), ColorSpace.CreateSrgb());
  68. image.EnqueueDrawRectangle
  69. (new ShapeData(new VecD(chunkSize), new VecD(chunkSize * 2), 0, 0, 0, Colors.Transparent, Colors.Red));
  70. Assert.Equal(Colors.Red, image.GetMostUpToDatePixel(new VecI(chunkSize + chunkSize / 2)));
  71. image.Dispose();
  72. Assert.Equal(0, Chunk.ChunkCounter);
  73. }
  74. [Fact]
  75. public void GetMostUpToDatePixel_BlendModeSrcOver_ReturnsCorrectPixel()
  76. {
  77. const int chunkSize = ChunkyImage.FullChunkSize;
  78. ChunkyImage image = new ChunkyImage(new VecI(chunkSize * 2), ColorSpace.CreateSrgb());
  79. image.EnqueueDrawRectangle
  80. (new ShapeData(new VecD(chunkSize), new VecD(chunkSize * 2), 0, 0, 0, Colors.Transparent, Colors.Red));
  81. image.CommitChanges();
  82. image.SetBlendMode(BlendMode.SrcOver);
  83. image.EnqueueDrawRectangle(new ShapeData(
  84. new VecD(chunkSize),
  85. new VecD(chunkSize * 2),
  86. 0, 0,
  87. 0,
  88. Colors.Transparent,
  89. new Color(0, 255, 0, 128)));
  90. Assert.Equal(new Color(127, 128, 0), image.GetMostUpToDatePixel(new VecI(chunkSize + chunkSize / 2)));
  91. image.Dispose();
  92. Assert.Equal(0, Chunk.ChunkCounter);
  93. }
  94. [Fact]
  95. public void EnqueueDrawRectangle_OutsideOfImage_PartsAreNotDrawn()
  96. {
  97. const int chunkSize = ChunkyImage.FullChunkSize;
  98. using ChunkyImage image = new(new VecI(chunkSize), ColorSpace.CreateSrgb());
  99. image.EnqueueDrawRectangle(new ShapeData(
  100. VecD.Zero,
  101. new VecD(chunkSize * 10),
  102. 0, 0,
  103. 0,
  104. Colors.Transparent,
  105. Colors.Red));
  106. image.CommitChanges();
  107. Assert.Collection(
  108. image.FindAllChunks(),
  109. elem => Assert.Equal(VecI.Zero, elem));
  110. }
  111. }