diff --git a/Userland/Libraries/LibPDF/Renderer.cpp b/Userland/Libraries/LibPDF/Renderer.cpp index b65e21ae55..f4280bf30a 100644 --- a/Userland/Libraries/LibPDF/Renderer.cpp +++ b/Userland/Libraries/LibPDF/Renderer.cpp @@ -827,7 +827,11 @@ PDFErrorOr Renderer::show_text(DeprecatedString const& string) return {}; } -static Vector upsample_to_8_bit(ReadonlyBytes content, int bits_per_component) +enum UpsampleMode { + StoreValuesUnchanged, + UpsampleTo8Bit, +}; +static Vector upsample_to_8_bit(ReadonlyBytes content, int bits_per_component, UpsampleMode mode) { VERIFY(bits_per_component == 1 || bits_per_component == 2 || bits_per_component == 4); Vector upsampled_storage; @@ -836,7 +840,10 @@ static Vector upsample_to_8_bit(ReadonlyBytes content, int bits_per_componen for (auto byte : content) { for (int i = 0; i < 8; i += bits_per_component) { auto value = (byte >> (8 - bits_per_component - i)) & mask; - upsampled_storage.append(value * (255 / mask)); + if (mode == UpsampleMode::UpsampleTo8Bit) + upsampled_storage.append(value * (255 / mask)); + else + upsampled_storage.append(value); } } return upsampled_storage; @@ -895,7 +902,8 @@ PDFErrorOr> Renderer::load_image(NonnullRefPtr upsampled_storage; if (bits_per_component < 8) { - upsampled_storage = upsample_to_8_bit(content, bits_per_component); + UpsampleMode mode = color_space->family() == ColorSpaceFamily::Indexed ? UpsampleMode::StoreValuesUnchanged : UpsampleMode::UpsampleTo8Bit; + upsampled_storage = upsample_to_8_bit(content, bits_per_component, mode); content = upsampled_storage; bits_per_component = 8; }