1 //========================================================================
2 //
3 // PNGWriter.h
4 //
5 // This file is licensed under the GPLv2 or later
6 //
7 // Copyright (C) 2009 Warren Toomey <wkt@tuhs.org>
8 // Copyright (C) 2009 Shen Liang <shenzhuxi@gmail.com>
9 // Copyright (C) 2009, 2011-2013, 2021 Albert Astals Cid <aacid@kde.org>
10 // Copyright (C) 2009 Stefan Thomas <thomas@eload24.com>
11 // Copyright (C) 2010, 2011, 2013, 2017 Adrian Johnson <ajohnson@redneon.com>
12 // Copyright (C) 2012 Pino Toscano <pino@kde.org>
13 //
14 //========================================================================
15 
16 #ifndef PNGWRITER_H
17 #define PNGWRITER_H
18 
19 #include "poppler-config.h"
20 #include "poppler_private_export.h"
21 
22 #ifdef ENABLE_LIBPNG
23 
24 #    include "ImgWriter.h"
25 
26 struct PNGWriterPrivate;
27 
28 class POPPLER_PRIVATE_EXPORT PNGWriter : public ImgWriter
29 {
30 public:
31     /* RGB        - 3 bytes/pixel
32      * RGBA       - 4 bytes/pixel
33      * GRAY       - 1 byte/pixel
34      * MONOCHROME - 8 pixels/byte
35      * RGB48      - 6 bytes/pixel
36      */
37     enum Format
38     {
39         RGB,
40         RGBA,
41         GRAY,
42         MONOCHROME,
43         RGB48
44     };
45 
46     explicit PNGWriter(Format format = RGB);
47     ~PNGWriter() override;
48 
49     PNGWriter(const PNGWriter &other) = delete;
50     PNGWriter &operator=(const PNGWriter &other) = delete;
51 
52     void setICCProfile(const char *name, unsigned char *data, int size);
53     void setSRGBProfile();
54 
55     bool init(FILE *f, int width, int height, int hDPI, int vDPI) override;
56 
57     bool writePointers(unsigned char **rowPointers, int rowCount) override;
58     bool writeRow(unsigned char **row) override;
59 
60     bool close() override;
61 
62 private:
63     PNGWriterPrivate *priv;
64 };
65 
66 #endif
67 
68 #endif
69