source: trunk/poppler/mypoppler/goo/PNGWriter.cc @ 277

Last change on this file since 277 was 277, checked in by rbri, 12 years ago

PDF plugin: Poppler library updated to version 0.12.3

  • Property svn:eol-style set to native
File size: 2.3 KB
Line 
1//========================================================================
2//
3// PNGWriter.cc
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 Albert Astals Cid <aacid@kde.org>
10//
11//========================================================================
12
13#include "PNGWriter.h"
14
15#ifdef ENABLE_LIBPNG
16
17#include "poppler/Error.h"
18
19PNGWriter::PNGWriter()
20{
21}
22
23PNGWriter::~PNGWriter()
24{
25        /* cleanup heap allocation */
26        png_destroy_write_struct(&png_ptr, &info_ptr);
27}
28
29bool PNGWriter::init(FILE *f, int width, int height)
30{
31        /* initialize stuff */
32        png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
33        if (!png_ptr) {
34                error(-1, "png_create_write_struct failed");
35                return false;
36        }
37
38        info_ptr = png_create_info_struct(png_ptr);
39        if (!info_ptr) {
40                error(-1, "png_create_info_struct failed");
41                return false;
42        }
43
44        if (setjmp(png_jmpbuf(png_ptr))) {
45                error(-1, "png_jmpbuf failed");
46                return false;
47        }
48
49        /* write header */
50        png_init_io(png_ptr, f);
51        if (setjmp(png_jmpbuf(png_ptr))) {
52                error(-1, "Error during writing header");
53                return false;
54        }
55       
56        // Set up the type of PNG image and the compression level
57        png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
58
59        png_byte bit_depth = 8;
60        png_byte color_type = PNG_COLOR_TYPE_RGB;
61        png_byte interlace_type = PNG_INTERLACE_NONE;
62
63        png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, interlace_type, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
64
65        png_write_info(png_ptr, info_ptr);
66        if (setjmp(png_jmpbuf(png_ptr))) {
67                error(-1, "error during writing png info bytes");
68                return false;
69        }
70       
71        return true;
72}
73
74bool PNGWriter::writePointers(png_bytep *rowPointers)
75{
76        png_write_image(png_ptr, rowPointers);
77        /* write bytes */
78        if (setjmp(png_jmpbuf(png_ptr))) {
79                error(-1, "Error during writing bytes");
80                return false;
81        }
82       
83        return true;
84}
85
86bool PNGWriter::writeRow(png_bytep *row)
87{
88        // Write the row to the file
89        png_write_rows(png_ptr, row, 1);
90        if (setjmp(png_jmpbuf(png_ptr))) {
91                error(-1, "error during png row write");
92                return false;
93        }
94       
95        return true;
96}
97
98bool PNGWriter::close()
99{
100        /* end write */
101        png_write_end(png_ptr, info_ptr);
102        if (setjmp(png_jmpbuf(png_ptr))) {
103                error(-1, "Error during end of write");
104                return false;
105        }
106       
107        return true;
108}
109
110#endif
Note: See TracBrowser for help on using the repository browser.