NAME

Image::Leptonica::Func::pnmio

VERSION

version 0.04

pnmio.c

pnmio.c

    Stream interface
        PIX             *pixReadStreamPnm()
        l_int32          readHeaderPnm()
        l_int32          freadHeaderPnm()
        l_int32          pixWriteStreamPnm()
        l_int32          pixWriteStreamAsciiPnm()

    Read/write to memory
        PIX             *pixReadMemPnm()
        l_int32          sreadHeaderPnm()
        l_int32          pixWriteMemPnm()

    Local helpers
        static l_int32   pnmReadNextAsciiValue();
        static l_int32   pnmSkipCommentLines();

    These are here by popular demand, with the help of Mattias
    Kregert (mattias@kregert.se), who provided the first implementation.

    The pnm formats are exceedingly simple, because they have
    no compression and no colormaps.  They support images that
    are 1 bpp; 2, 4, 8 and 16 bpp grayscale; and rgb.

    The original pnm formats ("ascii") are included for completeness,
    but their use is deprecated for all but tiny iconic images.
    They are extremely wasteful of memory; for example, the P1 binary
    ascii format is 16 times as big as the packed uncompressed
    format, because 2 characters are used to represent every bit
    (pixel) in the image.  Reading is slow because we check for extra
    white space and EOL at every sample value.

    The packed pnm formats ("raw") give file sizes similar to
    bmp files, which are uncompressed packed.  However, bmp
    are more flexible, because they can support colormaps.

    We don't differentiate between the different types ("pbm",
    "pgm", "ppm") at the interface level, because this is really a
    "distinction without a difference."  You read a file, you get
    the appropriate Pix.  You write a file from a Pix, you get the
    appropriate type of file.  If there is a colormap on the Pix,
    and the Pix is more than 1 bpp, you get either an 8 bpp pgm
    or a 24 bpp RGB pnm, depending on whether the colormap colors
    are gray or rgb, respectively.

    This follows the general policy that the I/O routines don't
    make decisions about the content of the image -- you do that
    with image processing before you write it out to file.
    The I/O routines just try to make the closest connection
    possible between the file and the Pix in memory.

    On systems like windows without fmemopen() and open_memstream(),
    we write data to a temp file and read it back for operations
    between pix and compressed-data, such as pixReadMemPnm() and
    pixWriteMemPnm().

FUNCTIONS

freadHeaderPnm

l_int32 freadHeaderPnm ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp )

freadHeaderPnm()

    Input:  stream opened for read
            &w (<optional return>)
            &h (<optional return>)
            &d (<optional return>)
            &type (<optional return> pnm type)
            &bps (<optional return>, bits/sample)
            &spp (<optional return>, samples/pixel)
    Return: 0 if OK, 1 on error

pixReadMemPnm

PIX * pixReadMemPnm ( const l_uint8 *cdata, size_t size )

pixReadMemPnm()

    Input:  cdata (const; pnm-encoded)
            size (of data)
    Return: pix, or null on error

Notes:
    (1) The @size byte of @data must be a null character.

pixReadStreamPnm

PIX * pixReadStreamPnm ( FILE *fp )

pixReadStreamPnm()

    Input:  stream opened for read
    Return: pix, or null on error

pixWriteMemPnm

l_int32 pixWriteMemPnm ( l_uint8 **pdata, size_t *psize, PIX *pix )

pixWriteMemPnm()

    Input:  &data (<return> data of tiff compressed image)
            &size (<return> size of returned data)
            pix
    Return: 0 if OK, 1 on error

Notes:
    (1) See pixWriteStreamPnm() for usage.  This version writes to
        memory instead of to a file stream.

pixWriteStreamAsciiPnm

l_int32 pixWriteStreamAsciiPnm ( FILE *fp, PIX *pix )

pixWriteStreamAsciiPnm()

    Input:  stream opened for write
            pix
    Return: 0 if OK; 1 on error

Writes "ascii" format only:
    1 bpp --> pbm (P1)
    2, 4, 8, 16 bpp, no colormap or grayscale colormap --> pgm (P2)
    2, 4, 8 bpp with color-valued colormap, or rgb --> rgb ppm (P3)

pixWriteStreamPnm

l_int32 pixWriteStreamPnm ( FILE *fp, PIX *pix )

pixWriteStreamPnm()

    Input:  stream opened for write
            pix
    Return: 0 if OK; 1 on error

Notes:
    (1) This writes "raw" packed format only:
        1 bpp --> pbm (P4)
        2, 4, 8, 16 bpp, no colormap or grayscale colormap --> pgm (P5)
        2, 4, 8 bpp with color-valued colormap, or rgb --> rgb ppm (P6)
    (2) 24 bpp rgb are not supported in leptonica, but this will
        write them out as a packed array of bytes (3 to a pixel).

readHeaderPnm

l_int32 readHeaderPnm ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp )

readHeaderPnm()

    Input:  filename
            &w (<optional return>)
            &h (<optional return>)
            &d (<optional return>)
            &type (<optional return> pnm type)
            &bps (<optional return>, bits/sample)
            &spp (<optional return>, samples/pixel)
    Return: 0 if OK, 1 on error

sreadHeaderPnm

l_int32 sreadHeaderPnm ( const l_uint8 *cdata, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp )

sreadHeaderPnm()

    Input:  cdata (const; pnm-encoded)
            size (of data)
            &w (<optional return>)
            &h (<optional return>)
            &d (<optional return>)
            &type (<optional return> pnm type)
            &bps (<optional return>, bits/sample)
            &spp (<optional return>, samples/pixel)
    Return: 0 if OK, 1 on error

AUTHOR

Zakariyya Mughal <zmughal@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Zakariyya Mughal.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.