1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 19:05:08 +00:00
serenity/Userland/Libraries/LibGfx/ImageFormats/CCITTDecoder.h
Lucas CHOLLET 26494600c4 LibGfx/TIFF: Parse the T4Options CCITT field
This field is described in: Section 11: CCITT Bilevel Encodings.
2024-01-18 14:00:56 +01:00

48 lines
1.2 KiB
C++

/*
* Copyright (c) 2023, Lucas Chollet <lucas.chollet@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/ByteBuffer.h>
namespace Gfx::CCITT {
// You can find a great overview of CCITT compression schemes here:
// https://www.fileformat.info/mirror/egff/ch09_05.htm
// The CCITT3 specification is accessible at this page:
// https://www.itu.int/rec/T-REC-T.4/en
// The unidimensional scheme is originally described in:
// 4.1 One-dimensional coding scheme
// However, this function implements the TIFF variant (see TIFFLoader.h for a spec link),
// differences are detailed in section:
// Section 10: Modified Huffman Compression
ErrorOr<ByteBuffer> decode_ccitt_rle(ReadonlyBytes bytes, u32 image_width, u32 image_height);
// While this is named for a CCITT context, this struct holds data like TIFF's T4Options tag
struct Group3Options {
enum class Mode : u8 {
OneDimension,
TwoDimensions,
};
enum class Compression : u8 {
Uncompressed,
Compressed,
};
enum class UseFillBits : u8 {
No = 0,
Yes = 1,
};
Mode dimensions = Mode::OneDimension;
Compression compression = Compression::Compressed;
UseFillBits use_fill_bits = UseFillBits::No;
};
}