FramebufferExtensionTests.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using Avalonia;
  2. using Avalonia.Media;
  3. using Avalonia.Media.Imaging;
  4. using Avalonia.Platform;
  5. using PixiEditor.AvaloniaUI.Helpers.Extensions;
  6. using PixiEditor.DrawingApi.Core.Numerics;
  7. using PixiEditor.Numerics;
  8. namespace PixiEditor.Tests;
  9. public class FramebufferExtensionTests
  10. {
  11. [Fact]
  12. public void TestThatExtractPixelsFromBitmapReturnsCorrectAmountOfPixels()
  13. {
  14. var bitmap = new WriteableBitmap(new PixelSize(10, 10), new Vector(96, 96), PixelFormats.Bgra8888);
  15. var pixels = bitmap.ExtractPixels();
  16. Assert.Equal(400, pixels.Length);
  17. }
  18. [Theory]
  19. [InlineData(255, 0, 0, 255)]
  20. [InlineData(0, 255, 0, 255)]
  21. [InlineData(0, 0, 255, 255)]
  22. [InlineData(255, 255, 255, 255)]
  23. [InlineData(0, 0, 0, 255)]
  24. [InlineData(255, 255, 255, 0)]
  25. [InlineData(0, 0, 0, 0)]
  26. public void TestThatWritePixelSetsCorrectColor(byte r, byte g, byte b, byte a)
  27. {
  28. var bitmap = new WriteableBitmap(new PixelSize(1, 1), new Vector(96, 96), PixelFormats.Bgra8888);
  29. using var framebuffer = bitmap.Lock();
  30. framebuffer.WritePixel(0, 0, Color.FromArgb(a, r, g, b));
  31. var pixels = framebuffer.GetPixels();
  32. Assert.Equal(r, pixels[2]);
  33. Assert.Equal(g, pixels[1]);
  34. Assert.Equal(b, pixels[0]);
  35. Assert.Equal(a, pixels[3]);
  36. }
  37. [Theory]
  38. [InlineData(255, 0, 0, 255)]
  39. [InlineData(0, 255, 0, 255)]
  40. [InlineData(0, 0, 255, 255)]
  41. [InlineData(255, 255, 255, 255)]
  42. [InlineData(0, 0, 0, 255)]
  43. [InlineData(255, 255, 255, 0)]
  44. [InlineData(0, 0, 0, 0)]
  45. public void TestThatWritePixelsSetsCorrectColor(byte r, byte g, byte b, byte a)
  46. {
  47. var bitmap = new WriteableBitmap(new PixelSize(1, 1), new Vector(96, 96), PixelFormats.Bgra8888);
  48. using var framebuffer = bitmap.Lock();
  49. framebuffer.WritePixels(new RectI(0, 0, 1, 1), new byte[] { b, g, r, a });
  50. var pixels = framebuffer.GetPixels();
  51. Assert.Equal(r, pixels[2]);
  52. Assert.Equal(g, pixels[1]);
  53. Assert.Equal(b, pixels[0]);
  54. Assert.Equal(a, pixels[3]);
  55. }
  56. [Theory]
  57. [InlineData(255, 0, 0, 255)]
  58. [InlineData(0, 255, 0, 255)]
  59. [InlineData(0, 0, 255, 255)]
  60. [InlineData(255, 255, 255, 255)]
  61. [InlineData(0, 0, 0, 255)]
  62. [InlineData(255, 255, 255, 0)]
  63. [InlineData(0, 0, 0, 0)]
  64. public void TestThatGetPixelsReturnsCorrectColor(byte r, byte g, byte b, byte a)
  65. {
  66. WriteableBitmap bitmap = new WriteableBitmap(new PixelSize(1, 1), new Vector(96, 96), PixelFormats.Bgra8888, AlphaFormat.Premul);
  67. using var framebuffer = bitmap.Lock();
  68. framebuffer.WritePixel(0, 0, Color.FromArgb(a, r, g, b));
  69. var color = framebuffer.GetPixel(0, 0);
  70. Assert.Equal(r, color.R);
  71. Assert.Equal(g, color.G);
  72. Assert.Equal(b, color.B);
  73. Assert.Equal(a, color.A);
  74. }
  75. [Fact]
  76. public void TestThatExtractPixelsFromBitmapReturnsCorrectBgra8888ByteSequence()
  77. {
  78. var bitmap = new WriteableBitmap(new PixelSize(4, 1), new Vector(96, 96), PixelFormats.Bgra8888);
  79. using var framebuffer = bitmap.Lock();
  80. framebuffer.WritePixel(0, 0, Color.FromArgb(255, 255, 0, 0)); //Red
  81. framebuffer.WritePixel(1, 0, Color.FromArgb(255, 0, 255, 0)); //Green
  82. framebuffer.WritePixel(2, 0, Color.FromArgb(255, 0, 0, 255)); //Blue
  83. framebuffer.WritePixel(3, 0, Color.FromArgb(255, 255, 255, 255)); //White
  84. var pixels = bitmap.ExtractPixels();
  85. Assert.Equal(0, pixels[0]);
  86. Assert.Equal(0, pixels[1]);
  87. Assert.Equal(255, pixels[2]);
  88. Assert.Equal(255, pixels[3]);
  89. Assert.Equal(0, pixels[4]);
  90. Assert.Equal(255, pixels[5]);
  91. Assert.Equal(0, pixels[6]);
  92. Assert.Equal(255, pixels[7]);
  93. Assert.Equal(255, pixels[8]);
  94. Assert.Equal(0, pixels[9]);
  95. Assert.Equal(0, pixels[10]);
  96. Assert.Equal(255, pixels[11]);
  97. Assert.Equal(255, pixels[12]);
  98. Assert.Equal(255, pixels[13]);
  99. Assert.Equal(255, pixels[14]);
  100. Assert.Equal(255, pixels[15]);
  101. }
  102. }