/** * pnmio.h * Simple I/O interface to the Portable Any Map (PNM) image file format. * Version 0.3, Release 2008-Jun-15. * * Copyright (C) 2002-2008 Cosmin Truta. * * This software is provided 'as-is', without any express or implied * warranty. In no event will the author(s) be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. * **/ #ifndef PNMIO_H #define PNMIO_H #include #include #include #ifdef __cplusplus extern "C" { #endif /** * PNM format codes **/ enum { PNM_P1 = 1, /* plain PBM */ PNM_P2 = 2, /* plain PGM */ PNM_P3 = 3, /* plain PPM */ PNM_P4 = 4, /* raw PBM */ PNM_P5 = 5, /* raw PGM */ PNM_P6 = 6, /* raw PPM */ PNM_P7 = 7 /* PAM (only partially implemented) */ }; /** * PNM info structure **/ typedef struct pnm_struct { unsigned int format; unsigned int depth; unsigned int width; unsigned int height; unsigned int maxval; } pnm_struct; /** * PNM input functions **/ int pnm_fget_header(pnm_struct *pnm_ptr, FILE *stream); int pnm_fget_values(const pnm_struct *pnm_ptr, unsigned int *sample_values, unsigned int num_rows, FILE *stream); int pnm_fget_bytes(const pnm_struct *pnm_ptr, unsigned char *sample_bytes, size_t sample_size, unsigned int num_rows, FILE *stream); /** * PNM output functions **/ int pnm_fput_header(const pnm_struct *pnm_ptr, FILE *stream); int pnm_fput_values(const pnm_struct *pnm_ptr, const unsigned int *sample_values, unsigned int num_rows, FILE *stream); int pnm_fput_bytes(const pnm_struct *pnm_ptr, const unsigned char *sample_bytes, size_t sample_size, unsigned int num_rows, FILE *stream); /** * PNM utility functions **/ int pnm_is_valid(const pnm_struct *pnm_ptr); size_t pnm_raw_sample_size(const pnm_struct *pnm_ptr); size_t pnm_mem_size(const pnm_struct *pnm_ptr, size_t sample_size, unsigned int num_rows); /** * PNM limits **/ #define PNM_UCHAR_BIT 8 #define PNM_UCHAR_MAX 0xffU #if UINT_MAX < 0xffffffffUL #define PNM_UINT_BIT 16 #define PNM_UINT_MAX 0xffffU #else #define PNM_UINT_BIT 32 #define PNM_UINT_MAX 0xffffffffU #endif #ifdef __cplusplus } /* extern "C" */ #endif #endif /* PNMIO_H */