diff --git a/Userland/Libraries/LibGfx/ImageFormats/TIFFLoader.cpp b/Userland/Libraries/LibGfx/ImageFormats/TIFFLoader.cpp index 2362883a5c8..4b6472a386d 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/TIFFLoader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/TIFFLoader.cpp @@ -108,20 +108,22 @@ public: if (!m_metadata.rows_per_strip().has_value() && segment_byte_counts()->size() != 1 && !is_tiled()) return Error::from_string_literal("TIFFImageDecoderPlugin: RowsPerStrip is not provided and impossible to deduce"); - if (!m_metadata.bits_per_sample().has_value()) - return Error::from_string_literal("TIFFImageDecoderPlugin: Tag BitsPerSample is missing"); + if (!is_bilevel(*m_metadata.photometric_interpretation())) { + if (!m_metadata.bits_per_sample().has_value()) + return Error::from_string_literal("TIFFImageDecoderPlugin: Tag BitsPerSample is missing"); - if (!m_metadata.samples_per_pixel().has_value()) - return Error::from_string_literal("TIFFImageDecoderPlugin: Tag SamplesPerPixel is missing"); + if (!m_metadata.samples_per_pixel().has_value()) + return Error::from_string_literal("TIFFImageDecoderPlugin: Tag SamplesPerPixel is missing"); - if (any_of(*m_metadata.bits_per_sample(), [](auto bit_depth) { return bit_depth == 0 || bit_depth > 32; })) - return Error::from_string_literal("TIFFImageDecoderPlugin: Invalid value in BitsPerSample"); + if (any_of(*m_metadata.bits_per_sample(), [](auto bit_depth) { return bit_depth == 0 || bit_depth > 32; })) + return Error::from_string_literal("TIFFImageDecoderPlugin: Invalid value in BitsPerSample"); - if (m_metadata.bits_per_sample()->size() != m_metadata.samples_per_pixel()) - return Error::from_string_literal("TIFFImageDecoderPlugin: Invalid number of values in BitsPerSample"); + if (m_metadata.bits_per_sample()->size() != m_metadata.samples_per_pixel()) + return Error::from_string_literal("TIFFImageDecoderPlugin: Invalid number of values in BitsPerSample"); - if (*m_metadata.samples_per_pixel() < samples_for_photometric_interpretation()) - return Error::from_string_literal("TIFFImageDecoderPlugin: Not enough values in BitsPerSample for given PhotometricInterpretation"); + if (*m_metadata.samples_per_pixel() < samples_for_photometric_interpretation()) + return Error::from_string_literal("TIFFImageDecoderPlugin: Not enough values in BitsPerSample for given PhotometricInterpretation"); + } return {}; } @@ -132,6 +134,8 @@ public: m_photometric_interpretation = m_metadata.photometric_interpretation().value(); if (m_metadata.bits_per_sample().has_value()) m_bits_per_sample = m_metadata.bits_per_sample().value(); + else if (is_bilevel(m_photometric_interpretation)) + m_bits_per_sample.append(1); if (m_metadata.image_width().has_value()) m_image_width = m_metadata.image_width().value(); if (m_metadata.predictor().has_value()) @@ -391,7 +395,7 @@ private: { // Section 8: Baseline Field Reference Guide // BitsPerSample must be 1, since this type of compression is defined only for bilevel images. - if (m_metadata.bits_per_sample()->size() > 1) + if (m_bits_per_sample.size() > 1) return Error::from_string_literal("TIFFImageDecoderPlugin: CCITT image with BitsPerSample greater than one"); if (!is_bilevel(*m_metadata.photometric_interpretation())) return Error::from_string_literal("TIFFImageDecoderPlugin: CCITT compression is used on a non bilevel image");