diff --git a/Tests/LibGfx/TestImageDecoder.cpp b/Tests/LibGfx/TestImageDecoder.cpp index 48cd495193..34ca809c03 100644 --- a/Tests/LibGfx/TestImageDecoder.cpp +++ b/Tests/LibGfx/TestImageDecoder.cpp @@ -71,6 +71,16 @@ TEST_CASE(test_bmp_top_down) TRY_OR_FAIL(expect_single_frame(*plugin_decoder)); } +TEST_CASE(test_bmp_1bpp) +{ + auto file = TRY_OR_FAIL(Core::MappedFile::map(TEST_INPUT("bmp/bitmap.bmp"sv))); + EXPECT(Gfx::BMPImageDecoderPlugin::sniff(file->bytes())); + auto plugin_decoder = TRY_OR_FAIL(Gfx::BMPImageDecoderPlugin::create(file->bytes())); + + auto frame = TRY_OR_FAIL(expect_single_frame_of_size(*plugin_decoder, { 399, 400 })); + EXPECT_EQ(frame.image->begin()[0], 0xff'ff'ff'ff); +} + TEST_CASE(test_ico_malformed_frame) { Array test_inputs = { diff --git a/Tests/LibGfx/test-inputs/bmp/bitmap.bmp b/Tests/LibGfx/test-inputs/bmp/bitmap.bmp new file mode 100644 index 0000000000..5520b349e5 Binary files /dev/null and b/Tests/LibGfx/test-inputs/bmp/bitmap.bmp differ diff --git a/Userland/Libraries/LibGfx/ImageFormats/BMPLoader.cpp b/Userland/Libraries/LibGfx/ImageFormats/BMPLoader.cpp index eca50ef10f..490f0e2437 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/BMPLoader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/BMPLoader.cpp @@ -979,11 +979,11 @@ static ErrorOr decode_bmp_color_table(BMPLoadingContext& context) if (bytes_per_color == 4) { if (!streamer.has_u32()) return Error::from_string_literal("Cannot read 32 bits"); - context.color_table.append(streamer.read_u32()); + context.color_table.append(streamer.read_u32() | 0xff'00'00'00); } else { if (!streamer.has_u24()) return Error::from_string_literal("Cannot read 24 bits"); - context.color_table.append(streamer.read_u24()); + context.color_table.append(streamer.read_u24() | 0xff'00'00'00); } }