diff --git a/Tests/LibGfx/TestImageDecoder.cpp b/Tests/LibGfx/TestImageDecoder.cpp index bb5a294425..f36a6afe35 100644 --- a/Tests/LibGfx/TestImageDecoder.cpp +++ b/Tests/LibGfx/TestImageDecoder.cpp @@ -95,7 +95,20 @@ TEST_CASE(test_ilbm) EXPECT(Gfx::ILBMImageDecoderPlugin::sniff(file->bytes())); auto plugin_decoder = MUST(Gfx::ILBMImageDecoderPlugin::create(file->bytes())); - expect_single_frame_of_size(*plugin_decoder, { 320, 200 }); + auto frame = expect_single_frame_of_size(*plugin_decoder, { 320, 200 }); + + EXPECT_EQ(frame.image->get_pixel(8, 0), Gfx::Color(0xee, 0xbb, 0, 255)); +} + +TEST_CASE(test_ilbm_uncompressed) +{ + auto file = MUST(Core::MappedFile::map(TEST_INPUT("ilbm/gradient-uncompressed.iff"sv))); + EXPECT(Gfx::ILBMImageDecoderPlugin::sniff(file->bytes())); + auto plugin_decoder = MUST(Gfx::ILBMImageDecoderPlugin::create(file->bytes())); + + auto frame = expect_single_frame_of_size(*plugin_decoder, { 320, 200 }); + + EXPECT_EQ(frame.image->get_pixel(8, 0), Gfx::Color(0xee, 0xbb, 0, 255)); } TEST_CASE(test_jpeg_sof0_one_scan) diff --git a/Tests/LibGfx/test-inputs/ilbm/gradient-uncompressed.iff b/Tests/LibGfx/test-inputs/ilbm/gradient-uncompressed.iff new file mode 100644 index 0000000000..ef77add5b0 Binary files /dev/null and b/Tests/LibGfx/test-inputs/ilbm/gradient-uncompressed.iff differ diff --git a/Userland/Libraries/LibGfx/ImageFormats/ILBMLoader.cpp b/Userland/Libraries/LibGfx/ImageFormats/ILBMLoader.cpp index 9b2efdd3cc..a448be0500 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/ILBMLoader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/ILBMLoader.cpp @@ -193,17 +193,17 @@ static ErrorOr decode_body_chunk(Chunk body_chunk, ILBMLoadingContext& con { dbgln_if(ILBM_DEBUG, "decode_body_chunk {}", body_chunk.data.size()); - if (context.bm_header.compression == CompressionType::ByteRun) { - // these are the uncompressed interleaved bitmap planes - auto plane_data = TRY(uncompress_byte_run(body_chunk.data, context)); - // that we need to convert to chunky pixel data - auto pixel_data = TRY(planar_to_chunky(plane_data, context)); + ByteBuffer pixel_data; - context.bitmap = TRY(chunky_to_bitmap(context, pixel_data)); + if (context.bm_header.compression == CompressionType::ByteRun) { + auto plane_data = TRY(uncompress_byte_run(body_chunk.data, context)); + pixel_data = TRY(planar_to_chunky(plane_data, context)); } else { - return Error::from_string_literal("Uncompress body not supported yet"); + pixel_data = TRY(planar_to_chunky(body_chunk.data, context)); } + context.bitmap = TRY(chunky_to_bitmap(context, pixel_data)); + return {}; }