blob: 81463f572cd8bcbe3987e119b8222d11594e5c49 [file] [log] [blame]
/**
* 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 <limits.h>
#include <stddef.h>
#include <stdio.h>
#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 */