diff options
Diffstat (limited to 'Build/source/libs/poppler/poppler-src/goo/PNGWriter.cc')
-rw-r--r-- | Build/source/libs/poppler/poppler-src/goo/PNGWriter.cc | 193 |
1 files changed, 0 insertions, 193 deletions
diff --git a/Build/source/libs/poppler/poppler-src/goo/PNGWriter.cc b/Build/source/libs/poppler/poppler-src/goo/PNGWriter.cc deleted file mode 100644 index f230fcaf96f..00000000000 --- a/Build/source/libs/poppler/poppler-src/goo/PNGWriter.cc +++ /dev/null @@ -1,193 +0,0 @@ -//======================================================================== -// -// PNGWriter.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright (C) 2009 Warren Toomey <wkt@tuhs.org> -// Copyright (C) 2009 Shen Liang <shenzhuxi@gmail.com> -// Copyright (C) 2009, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> -// Copyright (C) 2010, 2011, 2013, 2017 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2011 Thomas Klausner <wiz@danbala.tuwien.ac.at> -// Copyright (C) 2012 Pino Toscano <pino@kde.org> -// -//======================================================================== - -#include "PNGWriter.h" - -#ifdef ENABLE_LIBPNG - -#include <zlib.h> -#include <stdlib.h> -#include <string.h> - -#include "poppler/Error.h" -#include "goo/gmem.h" - -#include <png.h> - -struct PNGWriterPrivate { - PNGWriter::Format format; - png_structp png_ptr; - png_infop info_ptr; - unsigned char *icc_data; - int icc_data_size; - char *icc_name; - bool sRGB_profile; -}; - -PNGWriter::PNGWriter(Format formatA) -{ - priv = new PNGWriterPrivate; - priv->format = formatA; - priv->icc_data = nullptr; - priv->icc_data_size = 0; - priv->icc_name = nullptr; - priv->sRGB_profile = false; -} - -PNGWriter::~PNGWriter() -{ - /* cleanup heap allocation */ - png_destroy_write_struct(&priv->png_ptr, &priv->info_ptr); - if (priv->icc_data) { - gfree(priv->icc_data); - free(priv->icc_name); - } - - delete priv; -} - -void PNGWriter::setICCProfile(const char *name, unsigned char *data, int size) -{ - priv->icc_data = (unsigned char *)gmalloc(size); - memcpy(priv->icc_data, data, size); - priv->icc_data_size = size; - priv->icc_name = strdup(name); -} - -void PNGWriter::setSRGBProfile() -{ - priv->sRGB_profile = true; -} - -bool PNGWriter::init(FILE *f, int width, int height, int hDPI, int vDPI) -{ - /* libpng changed the png_set_iCCP() prototype in 1.5.0 */ -#if PNG_LIBPNG_VER < 10500 - png_charp icc_data_ptr = (png_charp)priv->icc_data; -#else - png_const_bytep icc_data_ptr = (png_const_bytep)priv->icc_data; -#endif - - /* initialize stuff */ - priv->png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr); - if (!priv->png_ptr) { - error(errInternal, -1, "png_create_write_struct failed"); - return false; - } - - priv->info_ptr = png_create_info_struct(priv->png_ptr); - if (!priv->info_ptr) { - error(errInternal, -1, "png_create_info_struct failed"); - return false; - } - - if (setjmp(png_jmpbuf(priv->png_ptr))) { - error(errInternal, -1, "png_jmpbuf failed"); - return false; - } - - /* write header */ - png_init_io(priv->png_ptr, f); - if (setjmp(png_jmpbuf(priv->png_ptr))) { - error(errInternal, -1, "Error during writing header"); - return false; - } - - // Set up the type of PNG image and the compression level - png_set_compression_level(priv->png_ptr, Z_BEST_COMPRESSION); - - // Silence silly gcc - png_byte bit_depth = -1; - png_byte color_type = -1; - switch (priv->format) { - case RGB: - bit_depth = 8; - color_type = PNG_COLOR_TYPE_RGB; - break; - case RGB48: - bit_depth = 16; - color_type = PNG_COLOR_TYPE_RGB; - break; - case RGBA: - bit_depth = 8; - color_type = PNG_COLOR_TYPE_RGB_ALPHA; - break; - case GRAY: - bit_depth = 8; - color_type = PNG_COLOR_TYPE_GRAY; - break; - case MONOCHROME: - bit_depth = 1; - color_type = PNG_COLOR_TYPE_GRAY; - break; - } - png_byte interlace_type = PNG_INTERLACE_NONE; - - png_set_IHDR(priv->png_ptr, priv->info_ptr, width, height, bit_depth, color_type, interlace_type, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); - - png_set_pHYs(priv->png_ptr, priv->info_ptr, hDPI/0.0254, vDPI/0.0254, PNG_RESOLUTION_METER); - - if (priv->icc_data) - png_set_iCCP(priv->png_ptr, priv->info_ptr, priv->icc_name, PNG_COMPRESSION_TYPE_BASE, icc_data_ptr, priv->icc_data_size); - else if (priv->sRGB_profile) - png_set_sRGB(priv->png_ptr, priv->info_ptr, PNG_sRGB_INTENT_RELATIVE); - - png_write_info(priv->png_ptr, priv->info_ptr); - if (setjmp(png_jmpbuf(priv->png_ptr))) { - error(errInternal, -1, "error during writing png info bytes"); - return false; - } - - return true; -} - -bool PNGWriter::writePointers(unsigned char **rowPointers, int rowCount) -{ - png_write_image(priv->png_ptr, rowPointers); - /* write bytes */ - if (setjmp(png_jmpbuf(priv->png_ptr))) { - error(errInternal, -1, "Error during writing bytes"); - return false; - } - - return true; -} - -bool PNGWriter::writeRow(unsigned char **row) -{ - // Write the row to the file - png_write_rows(priv->png_ptr, row, 1); - if (setjmp(png_jmpbuf(priv->png_ptr))) { - error(errInternal, -1, "error during png row write"); - return false; - } - - return true; -} - -bool PNGWriter::close() -{ - /* end write */ - png_write_end(priv->png_ptr, priv->info_ptr); - if (setjmp(png_jmpbuf(priv->png_ptr))) { - error(errInternal, -1, "Error during end of write"); - return false; - } - - return true; -} - -#endif |