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 | |
char * | io_png_info (void) |
helps tracking versions, via the string tag inserted into the library | |
static void * | io_png_read_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 * | io_png_read_raw (const char *fname, size_t *nxp, size_t *nyp, size_t *ncp, int png_transform, int dtype) |
internal function used to read a PNG file into an array | |
unsigned char * | io_png_read_u8 (const char *fname, size_t *nxp, size_t *nyp, size_t *ncp) |
read a PNG file into a 8bit integer array | |
unsigned char * | io_png_read_u8_rgb (const char *fname, size_t *nxp, size_t *nyp) |
read a PNG file into a 8bit integer array, converted to RGB | |
unsigned char * | io_png_read_u8_gray (const char *fname, size_t *nxp, size_t *nyp) |
read a PNG file into a 8bit integer array, converted to gray | |
float * | io_png_read_f32 (const char *fname, size_t *nxp, size_t *nyp, size_t *ncp) |
read a PNG file into a 32bit float array | |
float * | io_png_read_f32_rgb (const char *fname, size_t *nxp, size_t *nyp) |
read a PNG file into a 32bit float array, converted to RGB | |
float * | io_png_read_f32_gray (const char *fname, size_t *nxp, size_t *nyp) |
read a PNG file into a 32bit float array, converted to gray | |
static int | io_png_write_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 | io_png_write_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 | io_png_write_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 | io_png_write_f32 (const char *fname, const float *data, size_t nx, size_t ny, size_t nc) |
write a float array into a PNG file | |
Variables | |
static char | io_png_tag [] = "using io_png " IO_PNG_VERSION |
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 io_png_read_raw()
handle deinterlacing as a libpng transform function
Definition in file io_png.c.
char* io_png_info | ( | void | ) |
static void* io_png_read_abort | ( | FILE * | fp, | |
png_structp * | png_ptr_p, | |||
png_infop * | info_ptr_p | |||
) | [static] |
float* io_png_read_f32 | ( | const char * | fname, | |
size_t * | nxp, | |||
size_t * | nyp, | |||
size_t * | ncp | |||
) |
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 | |
nxp,nyp,ncp | pointers to variables to be filled with the number of columns, lines and channels of the image |
Definition at line 364 of file io_png.c.
float* io_png_read_f32_gray | ( | const char * | fname, | |
size_t * | nxp, | |||
size_t * | nyp | |||
) |
read a PNG file into a 32bit float array, converted to gray
See io_png_read_f32() for details.
Definition at line 415 of file io_png.c.
float* io_png_read_f32_rgb | ( | const char * | fname, | |
size_t * | nxp, | |||
size_t * | nyp | |||
) |
read a PNG file into a 32bit float array, converted to RGB
See io_png_read_f32() for details.
Definition at line 376 of file io_png.c.
static void* io_png_read_raw | ( | const char * | fname, | |
size_t * | nxp, | |||
size_t * | nyp, | |||
size_t * | ncp, | |||
int | png_transform, | |||
int | dtype | |||
) | [static] |
internal function used to read a PNG file into an array
fname | PNG file name, "-" means stdin | |
nxp,nyp,ncp | pointers to variables to be filled with the number of columns, lines and channels of the image | |
png_transform | a PNG_TRANSFORM flag to be added to the default libpng read transforms | |
dtype | identifier for the data type to be used for output |
Definition at line 110 of file io_png.c.
unsigned char* io_png_read_u8 | ( | const char * | fname, | |
size_t * | nxp, | |||
size_t * | nyp, | |||
size_t * | ncp | |||
) |
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 | |
nxp,nyp,ncp | pointers to variables to be filled with the number of columns, lines and channels of the image |
Definition at line 255 of file io_png.c.
unsigned char* io_png_read_u8_gray | ( | const char * | fname, | |
size_t * | nxp, | |||
size_t * | nyp | |||
) |
read a PNG file into a 8bit integer array, converted to gray
See io_png_read_u8() for details.
Definition at line 310 of file io_png.c.
unsigned char* io_png_read_u8_rgb | ( | const char * | fname, | |
size_t * | nxp, | |||
size_t * | nyp | |||
) |
read a PNG file into a 8bit integer array, converted to RGB
See io_png_read_u8() for details.
Definition at line 268 of file io_png.c.
static int io_png_write_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 465 of file io_png.c.
int io_png_write_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 669 of file io_png.c.
static int io_png_write_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 493 of file io_png.c.
int io_png_write_u8 | ( | const char * | fname, | |
const unsigned char * | data, | |||
size_t | nx, | |||
size_t | ny, | |||
size_t | nc | |||
) |
char io_png_tag[] = "using io_png " IO_PNG_VERSION [static] |