void LibPngCompressor::ensureHeaderIsWritten()

in cpp/spectrum/plugins/png/LibPngCompressor.cpp [129:164]


void LibPngCompressor::ensureHeaderIsWritten(
    const std::uint16_t colorType,
    const bool swapAlpha) {
  SPECTRUM_ENFORCE_IF_NOT(!writtenLastScanline);

  if (isHeaderWritten) {
    return;
  }

  if (setjmp(png_jmpbuf(libPngWriteStruct))) {
    throwError(__PRETTY_FUNCTION__, __LINE__, "png_set_IHDR");
  }

  png_set_IHDR(
      libPngWriteStruct,
      libPngInfoStruct,
      _options.imageSpecification.size.width,
      _options.imageSpecification.size.height,
      8,
      colorType,
      _options.configuration.png.useInterlacing() ? PNG_INTERLACE_ADAM7
                                                  : PNG_INTERLACE_NONE,
      PNG_COMPRESSION_TYPE_DEFAULT,
      PNG_FILTER_TYPE_DEFAULT);

  if (swapAlpha) {
    png_set_swap_alpha(libPngWriteStruct);
  }

  isHeaderWritten = true;

  if (setjmp(png_jmpbuf(libPngWriteStruct))) {
    throwError(__PRETTY_FUNCTION__, __LINE__, "png_write_info");
  }
  png_write_info(libPngWriteStruct, libPngInfoStruct);
}