| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
-
- #include "../testTools.h"
- #include "../../DFPSR/api/imageAPI.h"
- START_TEST(Pixel)
- { // ImageU8
- ImageU8 image;
- // Writing to a null image is always ignored
- image_writePixel(image, 0, 0, 137);
- image_writePixel(image, -37, 564, 84);
- // Reading from a null image always returns zero, even if a border color is given
- ASSERT_EQUAL(image_readPixel_clamp(image, 0, 0), 0);
- ASSERT_EQUAL(image_readPixel_clamp(image, -2, 68), 0);
- ASSERT_EQUAL(image_readPixel_tile(image, 0, 0), 0);
- ASSERT_EQUAL(image_readPixel_tile(image, 43, 213), 0);
- ASSERT_EQUAL(image_readPixel_border(image, 0, 0, 26), 0);
- ASSERT_EQUAL(image_readPixel_border(image, -36, -58, 26), 0);
- // Creating a 2x2 image
- image = image_create_U8(2, 2);
- // Saturated writes
- image_writePixel(image, 0, 0, -1);
- image_writePixel(image, 1, 0, 256);
- image_writePixel(image, 0, 1, -56456);
- image_writePixel(image, 1, 1, 76546);
- ASSERT_EQUAL(image_readPixel_clamp(image, 0, 0), 0);
- ASSERT_EQUAL(image_readPixel_clamp(image, 1, 0), 255);
- ASSERT_EQUAL(image_readPixel_clamp(image, 0, 1), 0);
- ASSERT_EQUAL(image_readPixel_clamp(image, 1, 1), 255);
- // Writing pixels
- image_writePixel(image, 0, 0, 12);
- image_writePixel(image, 1, 0, 34);
- image_writePixel(image, 0, 1, 56);
- image_writePixel(image, 1, 1, 78);
- // Writing pixels out of bound is also ignored
- image_writePixel(image, -1, 0, 45);
- image_writePixel(image, 1, 2, 15);
- image_writePixel(image, -463, 175, 245);
- image_writePixel(image, 987463, -75563, 64);
- // Sample inside
- ASSERT_EQUAL(image_readPixel_clamp(image, 0, 0), 12);
- ASSERT_EQUAL(image_readPixel_clamp(image, 1, 0), 34);
- ASSERT_EQUAL(image_readPixel_clamp(image, 0, 1), 56);
- ASSERT_EQUAL(image_readPixel_clamp(image, 1, 1), 78);
- ASSERT_EQUAL(image_readPixel_tile(image, 0, 0), 12);
- ASSERT_EQUAL(image_readPixel_tile(image, 1, 0), 34);
- ASSERT_EQUAL(image_readPixel_tile(image, 0, 1), 56);
- ASSERT_EQUAL(image_readPixel_tile(image, 1, 1), 78);
- ASSERT_EQUAL(image_readPixel_border(image, 0, 0, 23), 12);
- ASSERT_EQUAL(image_readPixel_border(image, 1, 0, 75), 34);
- ASSERT_EQUAL(image_readPixel_border(image, 0, 1, 34), 56);
- ASSERT_EQUAL(image_readPixel_border(image, 1, 1, 21), 78);
- // Sample outside
- ASSERT_EQUAL(image_readPixel_clamp(image, -3, 0), 12);
- ASSERT_EQUAL(image_readPixel_clamp(image, 0, -1), 12);
- ASSERT_EQUAL(image_readPixel_clamp(image, 4, 0), 34);
- ASSERT_EQUAL(image_readPixel_clamp(image, 1, -1), 34);
- ASSERT_EQUAL(image_readPixel_clamp(image, -4, 1), 56);
- ASSERT_EQUAL(image_readPixel_clamp(image, 0, 2), 56);
- ASSERT_EQUAL(image_readPixel_clamp(image, 2, 1), 78);
- ASSERT_EQUAL(image_readPixel_clamp(image, 1, 5), 78);
- ASSERT_EQUAL(image_readPixel_clamp(image, -24, -63), 12);
- ASSERT_EQUAL(image_readPixel_clamp(image, 37, -45), 34);
- ASSERT_EQUAL(image_readPixel_clamp(image, -1, 2), 56);
- ASSERT_EQUAL(image_readPixel_clamp(image, 34, 5), 78);
- // Borders are returned as is without saturation, which can be used for unique error codes
- ASSERT_EQUAL(image_readPixel_border(image, -23854, -61456, -23), -23);
- ASSERT_EQUAL(image_readPixel_border(image, 7564, 254, 376), 376);
- ASSERT_EQUAL(image_readPixel_border(image, -1457, 734166, 3), 3);
- ASSERT_EQUAL(image_readPixel_border(image, 62489, -17350, 1245), 1245);
- ASSERT_EQUAL(image_readPixel_border(image, 0, -1, 128), 128);
- ASSERT_EQUAL(image_readPixel_border(image, 1, -1, 498), 498);
- ASSERT_EQUAL(image_readPixel_border(image, 0, 2, -25), -25);
- ASSERT_EQUAL(image_readPixel_border(image, 1, 2, 47), 47);
- }
- { // ImageF32
- ImageF32 image;
- // Writing to a null image is always ignored
- image_writePixel(image, 0, 0, 137.0f);
- image_writePixel(image, -37, 564, 84.0f);
- // Reading from a null image always returns zero, even if a border color is given
- ASSERT_NEAR(image_readPixel_clamp(image, 0, 0), 0.0f);
- ASSERT_NEAR(image_readPixel_clamp(image, -2, 68), 0.0f);
- ASSERT_NEAR(image_readPixel_tile(image, 0, 0), 0.0f);
- ASSERT_NEAR(image_readPixel_tile(image, 43, 213), 0.0f);
- ASSERT_NEAR(image_readPixel_border(image, 0, 0, 26.0f), 0.0f);
- ASSERT_NEAR(image_readPixel_border(image, -36, -58, 26.0f), 0.0f);
- // Creating a 2x2 image
- image = image_create_F32(2, 2);
- // Writing pixels
- image_writePixel(image, 0, 0, 12.3f);
- image_writePixel(image, 1, 0, 23.4f);
- image_writePixel(image, 0, 1, 34.5f);
- image_writePixel(image, 1, 1, 45.6f);
- // Writing pixels out of bound is also ignored
- image_writePixel(image, -1, 0, 45.652f);
- image_writePixel(image, 1, 2, 15.459f);
- image_writePixel(image, -463, 175, 245.516f);
- image_writePixel(image, 987463, -75563, 64.342f);
- // Sample inside
- ASSERT_NEAR(image_readPixel_clamp(image, 0, 0), 12.3f);
- ASSERT_NEAR(image_readPixel_clamp(image, 1, 0), 23.4f);
- ASSERT_NEAR(image_readPixel_clamp(image, 0, 1), 34.5f);
- ASSERT_NEAR(image_readPixel_clamp(image, 1, 1), 45.6f);
- ASSERT_NEAR(image_readPixel_tile(image, 0, 0), 12.3f);
- ASSERT_NEAR(image_readPixel_tile(image, 1, 0), 23.4f);
- ASSERT_NEAR(image_readPixel_tile(image, 0, 1), 34.5f);
- ASSERT_NEAR(image_readPixel_tile(image, 1, 1), 45.6f);
- ASSERT_NEAR(image_readPixel_border(image, 0, 0, 23.53f), 12.3f);
- ASSERT_NEAR(image_readPixel_border(image, 1, 0, 75.16f), 23.4f);
- ASSERT_NEAR(image_readPixel_border(image, 0, 1, 23.48f), 34.5f);
- ASSERT_NEAR(image_readPixel_border(image, 1, 1, 21.64f), 45.6f);
- // Sample outside
- ASSERT_NEAR(image_readPixel_clamp(image, -3, 0), 12.3f);
- ASSERT_NEAR(image_readPixel_clamp(image, 0, -1), 12.3f);
- ASSERT_NEAR(image_readPixel_clamp(image, 4, 0), 23.4f);
- ASSERT_NEAR(image_readPixel_clamp(image, 1, -1), 23.4f);
- ASSERT_NEAR(image_readPixel_clamp(image, -4, 1), 34.5f);
- ASSERT_NEAR(image_readPixel_clamp(image, 0, 2), 34.5f);
- ASSERT_NEAR(image_readPixel_clamp(image, 2, 1), 45.6f);
- ASSERT_NEAR(image_readPixel_clamp(image, 1, 5), 45.6f);
- ASSERT_NEAR(image_readPixel_clamp(image, -24, -63), 12.3f);
- ASSERT_NEAR(image_readPixel_clamp(image, 37, -45), 23.4f);
- ASSERT_NEAR(image_readPixel_clamp(image, -1, 2), 34.5f);
- ASSERT_NEAR(image_readPixel_clamp(image, 34, 5), 45.6f);
- // Borders are returned as is, because float doesn't require saturation
- ASSERT_NEAR(image_readPixel_border(image, -23854, -61456, -23.4f), -23.4f);
- ASSERT_NEAR(image_readPixel_border(image, 7564, 254, 376.8f), 376.8f);
- ASSERT_NEAR(image_readPixel_border(image, -1457, 734166, 3.0f), 3.0f);
- ASSERT_NEAR(image_readPixel_border(image, 62489, -17350, 1245.2f), 1245.2f);
- ASSERT_NEAR(image_readPixel_border(image, 0, -1, 128.0f), 128.0f);
- ASSERT_NEAR(image_readPixel_border(image, 1, -1, 498.4f), 498.4f);
- ASSERT_NEAR(image_readPixel_border(image, 0, 2, -25.9f), -25.9f);
- ASSERT_NEAR(image_readPixel_border(image, 1, 2, 47.1f), 47.1f);
- }
- { // ImageRgbaU8
- ImageRgbaU8 image;
- // Writing to a null image is always ignored
- image_writePixel(image, 0, 0, ColorRgbaI32(25, 73, 8, 43));
- image_writePixel(image, -37, 564, ColorRgbaI32(86, 45, 68, 14));
- // Reading from a null image always returns zero, even if a border color is given
- ASSERT_EQUAL(image_readPixel_clamp(image, 0, 0), ColorRgbaI32(0, 0, 0, 0));
- ASSERT_EQUAL(image_readPixel_clamp(image, -2, 68), ColorRgbaI32(0, 0, 0, 0));
- ASSERT_EQUAL(image_readPixel_tile(image, 0, 0), ColorRgbaI32(0, 0, 0, 0));
- ASSERT_EQUAL(image_readPixel_tile(image, 43, 213), ColorRgbaI32(0, 0, 0, 0));
- ASSERT_EQUAL(image_readPixel_border(image, 0, 0, ColorRgbaI32(65, 96, 135, 57)), ColorRgbaI32(0, 0, 0, 0));
- ASSERT_EQUAL(image_readPixel_border(image, -36, -58, ColorRgbaI32(12, 75, 58, 53)), ColorRgbaI32(0, 0, 0, 0));
- // Creating a 2x2 image
- image = image_create_RgbaU8(2, 2);
- // Writing pixels with saturation
- image_writePixel(image, 0, 0, ColorRgbaI32(-36, 7645, -75, 345)); // Saturated to (0, 255, 0, 255)
- image_writePixel(image, 1, 0, ColorRgbaI32(1000, 477, 684, 255)); // Saturated to (255, 255, 255, 255)
- image_writePixel(image, 0, 1, ColorRgbaI32(-1, 0, 255, 256)); // Saturated to (0, 0, 255, 255)
- image_writePixel(image, 1, 1, ColorRgbaI32(0, 25, 176, 255)); // No effect from saturation
- // Writing pixels out of bound is also ignored
- image_writePixel(image, -1, 0, ColorRgbaI32(-57, 486, 65, 377));
- image_writePixel(image, 1, 2, ColorRgbaI32(7, 4, 6, 84));
- image_writePixel(image, -463, 175, ColorRgbaI32(86, 0, 47, 255));
- image_writePixel(image, 987463, -75563, ColorRgbaI32(55, 86, 55, 123));
- // Sample inside
- ASSERT_EQUAL(image_readPixel_clamp(image, 0, 0), ColorRgbaI32(0, 255, 0, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, 1, 0), ColorRgbaI32(255, 255, 255, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, 0, 1), ColorRgbaI32(0, 0, 255, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, 1, 1), ColorRgbaI32(0, 25, 176, 255));
- ASSERT_EQUAL(image_readPixel_tile(image, 0, 0), ColorRgbaI32(0, 255, 0, 255));
- ASSERT_EQUAL(image_readPixel_tile(image, 1, 0), ColorRgbaI32(255, 255, 255, 255));
- ASSERT_EQUAL(image_readPixel_tile(image, 0, 1), ColorRgbaI32(0, 0, 255, 255));
- ASSERT_EQUAL(image_readPixel_tile(image, 1, 1), ColorRgbaI32(0, 25, 176, 255));
- ASSERT_EQUAL(image_readPixel_border(image, 0, 0, ColorRgbaI32(54, 37, 66, 36)), ColorRgbaI32(0, 255, 0, 255));
- ASSERT_EQUAL(image_readPixel_border(image, 1, 0, ColorRgbaI32(12, 75, 58, 47)), ColorRgbaI32(255, 255, 255, 255));
- ASSERT_EQUAL(image_readPixel_border(image, 0, 1, ColorRgbaI32(75, 68, 72, 44)), ColorRgbaI32(0, 0, 255, 255));
- ASSERT_EQUAL(image_readPixel_border(image, 1, 1, ColorRgbaI32(86, 45, 77, 34)), ColorRgbaI32(0, 25, 176, 255));
- // Sample outside
- ASSERT_EQUAL(image_readPixel_clamp(image, -3, 0), ColorRgbaI32(0, 255, 0, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, 0, -1), ColorRgbaI32(0, 255, 0, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, 4, 0), ColorRgbaI32(255, 255, 255, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, 1, -1), ColorRgbaI32(255, 255, 255, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, -4, 1), ColorRgbaI32(0, 0, 255, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, 0, 2), ColorRgbaI32(0, 0, 255, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, 2, 1), ColorRgbaI32(0, 25, 176, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, 1, 5), ColorRgbaI32(0, 25, 176, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, -24, -63), ColorRgbaI32(0, 255, 0, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, 37, -45), ColorRgbaI32(255, 255, 255, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, -1, 2), ColorRgbaI32(0, 0, 255, 255));
- ASSERT_EQUAL(image_readPixel_clamp(image, 34, 5), ColorRgbaI32(0, 25, 176, 255));
- // Borders are returned as is without saturation, which can be used for unique error codes
- ASSERT_EQUAL(image_readPixel_border(image, -23854, -61456, ColorRgbaI32(-1, -1, -1, -1)), ColorRgbaI32(-1, -1, -1, -1));
- ASSERT_EQUAL(image_readPixel_border(image, 7564, 254, ColorRgbaI32(1245, 84, -215, 43)), ColorRgbaI32(1245, 84, -215, 43));
- ASSERT_EQUAL(image_readPixel_border(image, -1457, 734166, ColorRgbaI32(2000, 5, 2, 7)), ColorRgbaI32(2000, 5, 2, 7));
- ASSERT_EQUAL(image_readPixel_border(image, 62489, -17350, ColorRgbaI32(253, 46, 1574, 64)), ColorRgbaI32(253, 46, 1574, 64));
- ASSERT_EQUAL(image_readPixel_border(image, 0, -1, ColorRgbaI32(0, 0, 0, -1)), ColorRgbaI32(0, 0, 0, -1));
- ASSERT_EQUAL(image_readPixel_border(image, 1, -1, ColorRgbaI32(99, 99, 99, 99)), ColorRgbaI32(99, 99, 99, 99));
- ASSERT_EQUAL(image_readPixel_border(image, 0, 2, ColorRgbaI32(1, 2, 3, 4)), ColorRgbaI32(1, 2, 3, 4));
- ASSERT_EQUAL(image_readPixel_border(image, 1, 2, ColorRgbaI32(-1, -2, -3, -4)), ColorRgbaI32(-1, -2, -3, -4));
- }
- END_TEST
|