PNG read/write simplified interface. More...
#include <stdlib.h>#include <stdio.h>#include <math.h>#include <assert.h>#include <png.h>#include "io_png.h"
Go to the source code of this file.
Defines | |
| #define | PNG_SIG_LEN 4 |
| #define | IO_PNG_U8 0x0001 |
| #define | IO_PNG_F32 0x0002 |
Functions | |
| static void * | read_png_abort (FILE *fp, png_structp *png_ptr_p, png_infop *info_ptr_p) |
| internal function used to cleanup the memory when png_read_raw() fails | |
| static void * | read_png_raw (const char *fname, size_t *nx, size_t *ny, size_t *nc, int transform, int dtype) |
| internal function used to read a PNG file into an array | |
| unsigned char * | read_png_u8 (const char *fname, size_t *nx, size_t *ny, size_t *nc) |
| read a PNG file into a 8bit integer array | |
| unsigned char * | read_png_u8_rgb (const char *fname, size_t *nx, size_t *ny) |
| read a PNG file into a 8bit integer array, converted to RGB | |
| unsigned char * | read_png_u8_gray (const char *fname, size_t *nx, size_t *ny) |
| read a PNG file into a 8bit integer array, converted to gray | |
| float * | read_png_f32 (const char *fname, size_t *nx, size_t *ny, size_t *nc) |
| read a PNG file into a 32bit float array | |
| float * | read_png_f32_rgb (const char *fname, size_t *nx, size_t *ny) |
| read a PNG file into a 32bit float array, converted to RGB | |
| float * | read_png_f32_gray (const char *fname, size_t *nx, size_t *ny) |
| read a PNG file into a 32bit float array, converted to gray | |
| static int | write_png_abort (FILE *fp, png_byte *idata, png_bytep *row_pointers, png_structp *png_ptr_p, png_infop *info_ptr_p) |
| internal function used to cleanup the memory when png_write_raw() fails | |
| static int | write_png_raw (const char *fname, const void *data, size_t nx, size_t ny, size_t nc, int dtype) |
| internal function used to write a byte array as a PNG file | |
| int | write_png_u8 (const char *fname, const unsigned char *data, size_t nx, size_t ny, size_t nc) |
| write a 8bit unsigned integer array into a PNG file | |
| int | write_png_f32 (const char *fname, const float *data, size_t nx, size_t ny, size_t nc) |
| write a float array into a PNG file | |
PNG read/write simplified interface.
This is a front-end to libpng, with routines to:
Multi-channel images are handled : grey, grey+alpha, rgb and rgb+alpha, as well as on-the-fly color model conversion.
handle lossless 16bit data
add a test suite
internally handle RGB/gray conversion in read_png_raw()
handle deinterlacing as a libpng transform function
Definition in file io_png.c.
| static void* read_png_abort | ( | FILE * | fp, | |
| png_structp * | png_ptr_p, | |||
| png_infop * | info_ptr_p | |||
| ) | [static] |
| float* read_png_f32 | ( | const char * | fname, | |
| size_t * | nx, | |||
| size_t * | ny, | |||
| size_t * | nc | |||
| ) |
read a PNG file into a 32bit float array
The array contains the deinterlaced channels. 1, 2, 4 and 8bit images are converted to float values between 0. and 1., 3., 15. or 255. 16bit images are also downscaled to 8bit before conversion.
| fname | PNG file name | |
| nx,ny,nc | pointers to variables to be filled with the number of columns, lines and channels of the image |
Definition at line 379 of file io_png.c.

| float* read_png_f32_gray | ( | const char * | fname, | |
| size_t * | nx, | |||
| size_t * | ny | |||
| ) |
read a PNG file into a 32bit float array, converted to gray
See read_png_f32() for details.
Definition at line 432 of file io_png.c.

| float* read_png_f32_rgb | ( | const char * | fname, | |
| size_t * | nx, | |||
| size_t * | ny | |||
| ) |
read a PNG file into a 32bit float array, converted to RGB
See read_png_f32() for details.
Definition at line 391 of file io_png.c.

| static void* read_png_raw | ( | const char * | fname, | |
| size_t * | nx, | |||
| size_t * | ny, | |||
| size_t * | nc, | |||
| int | transform, | |||
| int | dtype | |||
| ) | [static] |
internal function used to read a PNG file into an array
| fname | PNG file name, "-" means stdin | |
| nx,ny,nc | pointers to variables to be filled with the number of columns, lines and channels of the image | |
| transform | a PNG_TRANSFORM to be added to the default read transforms | |
| dtype | identifier for the data type to be used for output |
Definition at line 116 of file io_png.c.


| unsigned char* read_png_u8 | ( | const char * | fname, | |
| size_t * | nx, | |||
| size_t * | ny, | |||
| size_t * | nc | |||
| ) |
read a PNG file into a 8bit integer array
The array contains the deinterlaced channels. 1, 2 and 4bit images are converted to 8bit. 16bit images are previously downscaled to 8bit.
| fname | PNG file name | |
| nx,ny,nc | pointers to variables to be filled with the number of columns, lines and channels of the image |
Definition at line 269 of file io_png.c.

| unsigned char* read_png_u8_gray | ( | const char * | fname, | |
| size_t * | nx, | |||
| size_t * | ny | |||
| ) |
read a PNG file into a 8bit integer array, converted to gray
See read_png_u8() for details.
Definition at line 324 of file io_png.c.

| unsigned char* read_png_u8_rgb | ( | const char * | fname, | |
| size_t * | nx, | |||
| size_t * | ny | |||
| ) |
read a PNG file into a 8bit integer array, converted to RGB
See read_png_u8() for details.
Definition at line 282 of file io_png.c.


| static int write_png_abort | ( | FILE * | fp, | |
| png_byte * | idata, | |||
| png_bytep * | row_pointers, | |||
| png_structp * | png_ptr_p, | |||
| png_infop * | info_ptr_p | |||
| ) | [static] |
internal function used to cleanup the memory when png_write_raw() fails
| fp | file pointer to close, ignored if NULL | |
| idata,row_pointers | arrays to free, ignored if NULL | |
| png_ptr_p,info_ptr_p,pointers | to PNG structure pointers, ignored if NULL |
Definition at line 486 of file io_png.c.

| int write_png_f32 | ( | const char * | fname, | |
| const float * | data, | |||
| size_t | nx, | |||
| size_t | ny, | |||
| size_t | nc | |||
| ) |
write a float array into a PNG file
The float values are rounded to 8bit integers, and bounded to [0, 255].
| fname | PNG file name | |
| data | array to write | |
| nx,ny,nc | number of columns, lines and channels of the image |
Definition at line 700 of file io_png.c.

| static int write_png_raw | ( | const char * | fname, | |
| const void * | data, | |||
| size_t | nx, | |||
| size_t | ny, | |||
| size_t | nc, | |||
| int | dtype | |||
| ) | [static] |
internal function used to write a byte array as a PNG file
The PNG file is written as a 8bit image file, interlaced, truecolor. Depending on the number of channels, the color model is gray, gray+alpha, rgb, rgb+alpha.
| fname | PNG file name, "-" means stdout | |
| data | deinterlaced (RRR..GGG..BBB..AAA) image byte array | |
| nx,ny,nc | number of columns, lines and channels | |
| dtype | identifier for the data type to be used for output |
Definition at line 515 of file io_png.c.


| int write_png_u8 | ( | const char * | fname, | |
| const unsigned char * | data, | |||
| size_t | nx, | |||
| size_t | ny, | |||
| size_t | nc | |||
| ) |
write a 8bit unsigned integer array into a PNG file
| fname | PNG file name | |
| data | array to write | |
| nx,ny,nc | number of columns, lines and channels of the image |
Definition at line 680 of file io_png.c.


1.6.3