35 int compression_method = 0;
36 int filter_method = 0;
37 int interlace_method = 0;
42 int samples_per_pixel = 0;
43 int bits_per_pixel = 0;
44 int bytes_per_pixel = 0;
45 int bytes_per_line = 0;
57 png(nonstd::span<std::byte const> bytes);
64 ivec extent()
const noexcept {
65 return ivec{width, height};
73 void read_header(nonstd::span<std::byte const> bytes,
ssize_t &offset);
74 void read_chunks(nonstd::span<std::byte const> bytes,
ssize_t &offset);
75 void read_IHDR(nonstd::span<std::byte const> bytes);
76 void read_cHRM(nonstd::span<std::byte const> bytes);
77 void read_gAMA(nonstd::span<std::byte const> bytes);
78 void read_iBIT(nonstd::span<std::byte const> bytes);
79 void read_iCCP(nonstd::span<std::byte const> bytes);
80 void read_sRGB(nonstd::span<std::byte const> bytes);
81 void generate_sRGB_transfer_function()
noexcept;
82 void generate_Rec2100_transfer_function()
noexcept;
83 void generate_gamma_transfer_function(
float gamma)
noexcept;
85 void unfilter_lines(
bstring &image_data)
const;
86 void unfilter_line(nonstd::span<uint8_t> line, nonstd::span<uint8_t const> prev_line)
const;
87 void unfilter_line_sub(nonstd::span<uint8_t> line, nonstd::span<uint8_t const> prev_line)
const noexcept;
88 void unfilter_line_up(nonstd::span<uint8_t> line, nonstd::span<uint8_t const> prev_line)
const noexcept;
89 void unfilter_line_average(nonstd::span<uint8_t> line, nonstd::span<uint8_t const> prev_line)
const noexcept;
90 void unfilter_line_paeth(nonstd::span<uint8_t> line, nonstd::span<uint8_t const> prev_line)
const noexcept;
93 ivec extract_pixel_from_line(nonstd::span<std::byte const> bytes,
int x)
const noexcept;