FramebufferExtensionTests.cs 3.9 KB

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