void LibPngCompressor::writeScanline()

in cpp/spectrum/plugins/png/LibPngCompressor.cpp [242:269]


void LibPngCompressor::writeScanline(
    std::unique_ptr<image::Scanline> scanline) {
  const auto pixelSpecification = scanline->specification();
  if (pixelSpecification == image::pixel::specifications::Gray ||
      pixelSpecification == image::pixel::specifications::RGB ||
      pixelSpecification == image::pixel::specifications::RGBA ||
      pixelSpecification == image::pixel::specifications::ARGB) {
    ensureHeaderIsWritten(
        colorTypeFromPixelSpecification(pixelSpecification),
        swapAlphaFromPixelSpecification(pixelSpecification));

    SPECTRUM_ENFORCE_IF_NOT(
        pixelSpecification == _options.imageSpecification.pixelSpecification);
    SPECTRUM_ENFORCE_IF_NOT(
        scanline->width() == _options.imageSpecification.size.width);
    SPECTRUM_ENFORCE_IF(writtenLastScanline);

    if (_options.configuration.png.useInterlacing()) {
      return internalWriteScanlineInterlaced(std::move(scanline));
    } else {
      return internalWriteScanlineBaseline(std::move(scanline));
    }
  } else {
    SPECTRUM_ERROR_STRING(
        codecs::error::CompressorCannotWritePixelSpecification,
        pixelSpecification.string());
  }
}