25 [[nodiscard]]
png(std::span<std::byte const> bytes);
49 matrix3 _color_to_sRGB = geo::identity();
59 int _compression_method = 0;
60 int _filter_method = 0;
61 int _interlace_method = 0;
66 int _samples_per_pixel = 0;
67 int _bits_per_pixel = 0;
68 int _bytes_per_pixel = 0;
69 int _bytes_per_line = 0;
80 void read_header(std::span<std::byte const> bytes,
std::size_t &offset);
81 void read_chunks(std::span<std::byte const> bytes,
std::size_t &offset);
82 void read_IHDR(std::span<std::byte const> bytes);
83 void read_cHRM(std::span<std::byte const> bytes);
84 void read_gAMA(std::span<std::byte const> bytes);
85 void read_iBIT(std::span<std::byte const> bytes);
86 void read_iCCP(std::span<std::byte const> bytes);
87 void read_sRGB(std::span<std::byte const> bytes);
88 void generate_sRGB_transfer_function()
noexcept;
89 void generate_Rec2100_transfer_function()
noexcept;
90 void generate_gamma_transfer_function(
float gamma)
noexcept;
92 void unfilter_lines(
bstring &image_data)
const;
93 void unfilter_line(std::span<uint8_t> line, std::span<uint8_t const> prev_line)
const;
94 void unfilter_line_sub(std::span<uint8_t> line, std::span<uint8_t const> prev_line)
const noexcept;
95 void unfilter_line_up(std::span<uint8_t> line, std::span<uint8_t const> prev_line)
const noexcept;
96 void unfilter_line_average(std::span<uint8_t> line, std::span<uint8_t const> prev_line)
const noexcept;
97 void unfilter_line_paeth(std::span<uint8_t> line, std::span<uint8_t const> prev_line)
const noexcept;
100 u16x4 extract_pixel_from_line(std::span<std::byte const> bytes,
int x)
const noexcept;