bool ImageWriterPNG::beginWrite()

in imagecore/formats/internal/png.cpp [440:470]


bool ImageWriterPNG::beginWrite(unsigned int width, unsigned int height, EImageColorModel colorModel)
{
	if( setjmp(png_jmpbuf(m_PNGCompress)) ) {
		return false;
	}
	if( !Image::colorModelIsRGBA(colorModel) && !Image::colorModelIsGrayscale(colorModel) ) {
		return false;
	}
	unsigned int colorType = 0;
	if( colorModel == kColorModel_RGBX && m_SourceReader != NULL && m_SourceReader->getNativeColorModel() == kColorModel_RGBA ) {
		colorType = PNG_COLOR_TYPE_RGBA;
	} else if( colorModel == kColorModel_RGBA && m_SourceReader != NULL && m_SourceReader->getNativeColorModel() == kColorModel_RGBX ) {
		colorType = PNG_COLOR_TYPE_RGB;
	} else if( colorModel == kColorModel_RGBA ) {
		colorType = PNG_COLOR_TYPE_RGBA;
	} else if( colorModel == kColorModel_RGBX ) {
		colorType = PNG_COLOR_TYPE_RGB;
	} else if( colorModel == kColorModel_Grayscale ) {
		colorType = PNG_COLOR_TYPE_GRAY;
	} else {
		SECURE_ASSERT(0);
	}
	png_set_IHDR(m_PNGCompress, m_PNGInfo, width, height, 8, colorType, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
	png_write_info(m_PNGCompress, m_PNGInfo);
	applyCompressionSettings();
	if( colorType == PNG_COLOR_TYPE_RGB ) {
		png_set_filler(m_PNGCompress, 0, PNG_FILLER_AFTER);
	}

	return true;
}