10
10
#include "pngwrite.h"
12
void pngwrite( image_t *image, char* filename )
12
void pngwrite( image_t *image, char* filename, int height )
14
14
png_structp png_ptr;
15
15
png_infop info_ptr;
16
png_bytep *firstrowps = image->rowps;
17
volatile png_FILE_p fp = stdout;
20
if( !strcmp( filename, "-" ) )
19
/* create file or use stdout */
20
if( strcmp( filename, "-" ) )
27
23
fp = fopen(filename, "wb");
31
fail("[pngwrite] File %s could not be opened for writing", filename);
28
fail( "[pngwrite] File %s could not be opened for writing\n", filename );
34
32
/* initialize stuff */
35
33
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
38
fail("[pngwrite] png_create_write_struct failed");
37
fail( "[pngwrite] png_create_write_struct failed\n" );
40
40
info_ptr = png_create_info_struct(png_ptr);
42
fail("[pngwrite] png_create_info_struct failed");
43
fail( "[pngwrite] png_create_info_struct failed\n" );
44
if (setjmp(png_jmpbuf(png_ptr)))
45
fail("[pngwrite] Error during init_io");
46
if( setjmp(png_jmpbuf(png_ptr)) )
48
fail( "[pngwrite] Error during init_io\n" );
47
51
png_init_io(png_ptr, fp);
51
if (setjmp(png_jmpbuf(png_ptr)))
52
fail("[pngwrite] Error during writing header");
55
if( setjmp(png_jmpbuf(png_ptr)) )
57
fail( "[pngwrite] Error during writing header\n" );
54
png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
55
1, PNG_COLOR_TYPE_GRAY, PNG_INTERLACE_NONE,
56
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
60
png_set_IHDR(png_ptr, info_ptr, image->width, height,
61
1, PNG_COLOR_TYPE_GRAY, PNG_INTERLACE_NONE,
62
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
58
64
png_write_info(png_ptr, info_ptr);
62
if (setjmp(png_jmpbuf(png_ptr)))
63
fail("[pngwrite] Error during writing bytes");
65
png_write_image(png_ptr, image->rowps);
68
if( setjmp(png_jmpbuf(png_ptr)) )
70
fail( "[pngwrite] Error during writing bytes\n" );
73
if( height < image->height )
75
firstrowps += (image->height - height) / 2;
76
png_write_rows( png_ptr, firstrowps, height );
80
png_write_image(png_ptr, image->rowps );
69
if (setjmp(png_jmpbuf(png_ptr)))
70
fail("[pngwrite] Error during end of write");
85
if( setjmp(png_jmpbuf(png_ptr)) )
87
fail("[pngwrite] Error during end of write\n");
72
png_write_end(png_ptr, NULL);
90
png_write_end( png_ptr, NULL );