LibGfx: Support missing pixel formats in get_pixel()

Bitmap::get_pixel() was only handling two out of the four possible pixel
formats, asserting when called with the other two. The asserting code
path was triggered when loading JPEG XL images, causing crashes on pages
like https://jpegxl.info/resources/jpeg-xl-test-page or
https://html5test.co/.
This commit is contained in:
InvalidUsernameException 2025-04-19 17:26:56 +02:00 committed by Jelle Raaijmakers
commit 578a3af87d
Notes: github-actions[bot] 2025-04-23 07:31:25 +00:00
11 changed files with 92 additions and 0 deletions

View file

@ -15,6 +15,52 @@ TEST_CASE(color)
}
}
TEST_CASE(from_rgb)
{
EXPECT_EQ(Color(0x00, 0x00, 0xff), Color::from_rgb(0x000000ff));
EXPECT_EQ(Color(0x00, 0xff, 0x00), Color::from_rgb(0x0000ff00));
EXPECT_EQ(Color(0xff, 0x00, 0x00), Color::from_rgb(0x00ff0000));
EXPECT_EQ(Color(0x00, 0x00, 0xff), Color::from_rgb(0xff0000ff));
EXPECT_EQ(Color(0x00, 0xff, 0x00), Color::from_rgb(0xff00ff00));
EXPECT_EQ(Color(0xff, 0x00, 0x00), Color::from_rgb(0xffff0000));
EXPECT_EQ(Color(0xaa, 0xbb, 0xcc), Color::from_rgb(0x00aabbcc));
}
TEST_CASE(from_argb)
{
EXPECT_EQ(Color(0x00, 0x00, 0x00, 0xff), Color::from_argb(0xff000000));
EXPECT_EQ(Color(0x00, 0x00, 0xff, 0x00), Color::from_argb(0x000000ff));
EXPECT_EQ(Color(0x00, 0xff, 0x00, 0x00), Color::from_argb(0x0000ff00));
EXPECT_EQ(Color(0xff, 0x00, 0x00, 0x00), Color::from_argb(0x00ff0000));
EXPECT_EQ(Color(0xaa, 0xbb, 0xcc, 0xdd), Color::from_argb(0xddaabbcc));
}
TEST_CASE(from_bgr)
{
EXPECT_EQ(Color(0x00, 0x00, 0xff), Color::from_bgr(0x00ff0000));
EXPECT_EQ(Color(0x00, 0xff, 0x00), Color::from_bgr(0x0000ff00));
EXPECT_EQ(Color(0xff, 0x00, 0x00), Color::from_bgr(0x000000ff));
EXPECT_EQ(Color(0x00, 0x00, 0xff), Color::from_bgr(0xffff0000));
EXPECT_EQ(Color(0x00, 0xff, 0x00), Color::from_bgr(0xff00ff00));
EXPECT_EQ(Color(0xff, 0x00, 0x00), Color::from_bgr(0xff0000ff));
EXPECT_EQ(Color(0xaa, 0xbb, 0xcc), Color::from_bgr(0x00ccbbaa));
}
TEST_CASE(from_abgr)
{
EXPECT_EQ(Color(0x00, 0x00, 0x00, 0xff), Color::from_abgr(0xff000000));
EXPECT_EQ(Color(0x00, 0x00, 0xff, 0x00), Color::from_abgr(0x00ff0000));
EXPECT_EQ(Color(0x00, 0xff, 0x00, 0x00), Color::from_abgr(0x0000ff00));
EXPECT_EQ(Color(0xff, 0x00, 0x00, 0x00), Color::from_abgr(0x000000ff));
EXPECT_EQ(Color(0xaa, 0xbb, 0xcc, 0xdd), Color::from_abgr(0xddccbbaa));
}
TEST_CASE(all_green)
{
EXPECT_EQ(Color(Color::NamedColor::Green), Color::from_lab(87.8185, -79.2711, 80.9946));