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());
}
}