diff --git a/Tests/LibGfx/TestImageDecoder.cpp b/Tests/LibGfx/TestImageDecoder.cpp index 01e6c3bcd5..72abf48097 100644 --- a/Tests/LibGfx/TestImageDecoder.cpp +++ b/Tests/LibGfx/TestImageDecoder.cpp @@ -1204,6 +1204,17 @@ TEST_CASE(test_tvg_malformed) } } +TEST_CASE(test_tvg_rgb565) +{ + auto file = TRY_OR_FAIL(Core::MappedFile::map(TEST_INPUT("tvg/green-rgb565.tvg"sv))); + EXPECT(Gfx::TinyVGImageDecoderPlugin::sniff(file->bytes())); + auto plugin_decoder = TRY_OR_FAIL(Gfx::TinyVGImageDecoderPlugin::create(file->bytes())); + auto frame = TRY_OR_FAIL(expect_single_frame_of_size(*plugin_decoder, { 100, 100 })); + + // Should be a solid dark green: + EXPECT_EQ(frame.image->get_pixel(50, 50), Gfx::Color(0, 130, 0)); +} + TEST_CASE(test_jxl_modular_simple_tree_upsample2_10bits) { auto file = TRY_OR_FAIL(Core::MappedFile::map(TEST_INPUT("jxl/modular_simple_tree_upsample2_10bits_rct.jxl"sv))); diff --git a/Tests/LibGfx/test-inputs/tvg/green-rgb565.tvg b/Tests/LibGfx/test-inputs/tvg/green-rgb565.tvg new file mode 100644 index 0000000000..ec83558fc4 Binary files /dev/null and b/Tests/LibGfx/test-inputs/tvg/green-rgb565.tvg differ diff --git a/Userland/Libraries/LibGfx/ImageFormats/TinyVGLoader.cpp b/Userland/Libraries/LibGfx/ImageFormats/TinyVGLoader.cpp index b987a8ff51..ff2fe4dba5 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/TinyVGLoader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/TinyVGLoader.cpp @@ -147,7 +147,7 @@ static ErrorOr> decode_color_table(Stream& stream, ColorEncoding e auto red = (color >> (6 + 5)) & 0x1f; auto green = (color >> 5) & 0x3f; auto blue = (color >> 0) & 0x1f; - return Color((red * 255 + 15) / 31, (green * 255 + 31), (blue * 255 + 15) / 31); + return Color((red * 255 + 15) / 31, (green * 255 + 31) / 63, (blue * 255 + 15) / 31); } case ColorEncoding::RGBAF32: { auto red = TRY(stream.read_value>());