mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 13:17:35 +00:00
LibGfx/TIFF: Factorize code to verify that CCITT images are correct
This commit is contained in:
parent
a9a5ca6754
commit
9b50b5793b
1 changed files with 13 additions and 6 deletions
|
@ -258,6 +258,18 @@ private:
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ErrorOr<void> ensure_tags_are_correct_for_ccitt() const
|
||||||
|
{
|
||||||
|
// 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)
|
||||||
|
return Error::from_string_literal("TIFFImageDecoderPlugin: CCITT image with BitsPerSample greater than one");
|
||||||
|
if (m_metadata.photometric_interpretation() != PhotometricInterpretation::WhiteIsZero && m_metadata.photometric_interpretation() != PhotometricInterpretation::BlackIsZero)
|
||||||
|
return Error::from_string_literal("TIFFImageDecoderPlugin: CCITT compression is used on a non bilevel image");
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
ErrorOr<void> decode_frame_impl()
|
ErrorOr<void> decode_frame_impl()
|
||||||
{
|
{
|
||||||
switch (*m_metadata.compression()) {
|
switch (*m_metadata.compression()) {
|
||||||
|
@ -270,12 +282,7 @@ private:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Compression::CCITT: {
|
case Compression::CCITT: {
|
||||||
// Section 8: Baseline Field Reference Guide
|
TRY(ensure_tags_are_correct_for_ccitt());
|
||||||
// BitsPerSample must be 1, since this type of compression is defined only for bilevel images.
|
|
||||||
if (m_metadata.bits_per_sample()->size() > 1)
|
|
||||||
return Error::from_string_literal("TIFFImageDecoderPlugin: CCITT image with BitsPerSample greater than one");
|
|
||||||
if (m_metadata.photometric_interpretation() != PhotometricInterpretation::WhiteIsZero && m_metadata.photometric_interpretation() != PhotometricInterpretation::BlackIsZero)
|
|
||||||
return Error::from_string_literal("TIFFImageDecoderPlugin: CCITT compression is used on a non bilevel image");
|
|
||||||
|
|
||||||
ByteBuffer decoded_bytes {};
|
ByteBuffer decoded_bytes {};
|
||||||
auto decode_ccitt_1D_strip = [&](u32 num_bytes) -> ErrorOr<ReadonlyBytes> {
|
auto decode_ccitt_1D_strip = [&](u32 num_bytes) -> ErrorOr<ReadonlyBytes> {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue