libppm man page on YellowDog

Man page or keyword search:  
man Server   18644 pages
apropos Keyword Search (all sections)
Output format
YellowDog logo
[printable version]

User manual for old ppm functions(3)	  User manual for old ppm functions(3)

NAME
       libppm - functions for PPM programs

SYNOPSIS
       #include ppm.h ⟨file:/usr/include/ppm.h⟩

       void ppm_init(int * argcP,
	 char * argv[]);

       pixel ** ppm_allocarray(

       int cols,int rows);

       pixel * ppm_allocrow(int cols);

       void ppm_freearray(pixel ** pixels,
	 int rows);

       void ppm_freerow(pixel * pixelrow);

       void ppm_readppminit(FILE * fp,
	 int * colsP,
	 int * rowsP,

       pixval * maxvalP,int * formatP );

       void ppm_readppmrow(FILE *fp,
	 pixel * pixelrow,
	 int cols,
	 pixval maxval,
	 int format);

       pixel ** ppm_readppm(FILE * fp,
	 int * colsP,
	 int * rowsP,
	 pixvalP * maxvalP);

       void ppm_writeppminit(FILE * fp,
	 int cols,
	 int rows,
	 pixval maxval,
	 int forceplain);

       void ppm_writeppmrow(FILE * fp,
	 pixel * pixelrow,
	 int cols,
	 pixval maxval,
	 int forceplain);

       void ppm_writeppm(FILE * fp,
	 pixel ** pixels,
	 int cols,
	 int rows,
	 pixval maxval,
	 int forceplain);

       void ppm_writeppm(FILE * fp,
	 pixel ** pixels,
	 int cols,
	 int rows,
	 pixval maxval,
	 int forceplain);

       void ppm_nextimage(FILE * file,
	 int * const eofP);

       void ppm_check(FILE * file,
	 const enum pm_check_type check_type,
	 const int format,
	 const int cols,
	 const int rows,
	 const int maxval, enum pm_check_code * const retval);

       typedef ... pixel;

       typedef ... pixval;

       #define PPM_MAXMAXVAL ...

       #define PPM_OVERALLMAXVAL ...

       #define PPM_FORMAT ...

       #define RPPM_FORMAT ...

       #define PPM_TYPE PPM_FORMAT

       #define PPM_FORMAT_TYPE(format) ...

       extern pixval ppm_pbmmaxval;

       pixval PPM_GETR(pixel p)

       pixval PPM_GETG(pixel p)

       pixval PPM_GETB(pixel p)

       void PPM_ASSIGN(pixel p,
	 pixval red,
	 pixval grn,
	 pixval blu)

       int PPM_EQUAL(pixel p,
	 pixel q)

       int PPM_ISGRAY(pixel p)

       void
	 PPM_DEPTH(pixel newp,
	 pixel p,
	 pixval oldmaxval,
	 pixval newmaxval)

       pixel ppm_parsecolor(char * colorname,
	  pixval maxval)

       char * ppm_colorname(pixel * colorP,
	 pixval maxval,
	 int hexok)

       void ppm_readcolornamefile(
	 const char *fileName,
	 int mustOpen,
	 colorhash_table * chtP,
	 const char *** colornamesP
	 )

DESCRIPTION
       These library functions are part of Netpbm(1).

   TYPES AND CONSTANTS
       Each  pixel  contains  three pixvals, each of which should contain only
       the values between 0 and PPM_MAXMAXVAL.	ppm_pbmmaxval  is  the	maxval
       used  when  a PPM program reads a PBM file.  Normally it is 1; however,
       for some programs, a larger value gives better results.

       <H3 id="manipulating_pixels">MANIPULATING PIXELS</H3>

       The macros PPM_GETR, PPM_GETG, and PPM_GETB retrieve the red, green, or
       blue sample, respectively, from the given pixel.

       The  PPM_ASSIGN	macro  assigns the given values to the red, green, and
       blue samples of the given pixel.

       The PPM_EQUAL macro tests two pixels for equality.

       The PPM_ISGRAY macro tests a pixel for being gray.  It returns true  if
       and only if the color of pixel p is black, white, or gray.

       The  PPM_DEPTH macro scales the colors of pixel p according the old and
       new maxvals and assigns the new values to newp.	It is intended to make
       writing ppmtowhatever easier.

       The  PPM_LUMIN, PPM_CHROM_R, and PPM_CHROM_B macros determine the lumi‐
       nance, red chrominance, and  blue  chrominance,	respectively,  of  the
       pixel p.	 The scale of all these values is the same as the scale of the
       input samples (i.e. 0 to maxval for luminance,  -maxval/2  to  maxval/2
       for chrominance).

       Note  that  the	macros do it by floating point multiplication.	If you
       are computing these values over an entire image,	 it  may  be  signifi‐
       cantly faster to do it with multiplication tables instead.  Compute all
       the possible products once up front, then for each pixel, just look  up
       the products in the tables.

   INITIALIZATION
       ppm_init() is identical to pm_init.

   MEMORY MANAGEMENT
       ppm_allocarray() allocates an array of pixels.

       ppm_allocrow() allocates a row of the given number of pixels.

       ppm_freearray()	frees  the  array allocated with ppm_allocarray() con‐
       taining the given number of rows.

       ppm_freerow() frees a row of pixelss allocated with ppm_allocrow().

   READING FILES
       If a function in this section is called on a PBM or PGM format file, it
       translates the PBM or PGM file into a PPM file on the fly and functions
       as if it were called on the equivalent  PPM  file.   The	 format	 value
       returned	 by  ppm_readppminit() is, however, not translated.  It repre‐
       sents the actual format of the PBM or PGM file.

       ppm_readppminit() reads the header of a PPM  file,  returning  all  the
       information  from the header and leaving the file positioned just after
       the header.

       ppm_readppmrow() reads a row of pixels into the pixelrow	 array.	  for‐
       mat, cols, and maxval are the values returned by ppm_readppminit().

       ppm_readppm()  reads  an	 entire	 PPM  image into memory, returning the
       allocated array as its return value and returning the information  from
       the   header  as	 rows,	cols,  and  maxval.   This  function  combines
       ppm_readppminit(), ppm_allocarray(), and ppm_readppmrow().

   WRITING FILES
       ppm_writeppminit() writes the header for a PPM file and leaves it posi‐
       tioned just after the header.

       forceplain is a logical value that tells ppm_writeppminit()  to write a
       header for a plain PPM format file, as opposed  to  a  raw  PPM	format
       file.

       ppm_writeppmrow()  writes the row pixelrow to a PPM file.  For meaning‐
       ful results, cols, maxval, and forceplain must be the same as was  used
       with ppm_writeppminit().

       ppm_writeppm()  write  the  header  and all data for a PPM image.  This
       function combines ppm_writeppminit() and ppm_writeppmrow().

   MISCELLANEOUS
       ppm_nextimage() positions a PPM input file to the next image in it  (so
       that a subsequent ppm_readppminit() reads its header).

       ppm_nextimage() is analogous to pbm_nextimage(), but works on PPM, PGM,
       and PBM files.

       ppm_check()  checks for the common file integrity error where the  file
       is the wrong size to contain all the image data.

       ppm_check()   is	 analogous  to pbm_check(), but works on PPM, PGM, and
       PBM files.

   COLOR
       Luminance, Chrominance (YcbCr)

       <code>
	   float PPM_LUMIN(pixel p);
	   float PPM_CHROM_B(pixel p);
	   float PPM_CHROM_R(pixel p);
       </code>

       PPM_LUMIN takes a pixel as an argument and  returns  the	 luminance  of
       that pixel, with the same maxval as the pixel (e.g. if the pixel's max‐
       val is 255, a PPM_LUMIN value of 255 means fully luminant).

       PPM_CHROM_B and PPM_CHROM_R are similar, for the red and	 blue  chromi‐
       nance values.

       <CODE>
	   pixel
	   ppm_color_from_ycbcr(unsigned int y,
				int	     cb,
				int	     cr);
       </CODE>

       ppm_color_from_ycbcr()  converts	 in  the other direction.  Given lumi‐
       nance and chrominance, it returns a pixel value.

       Hue, Saturation, Value (HSV)

       <code>
	   struct hsv {
	       double h;  /* hue (degrees)  0..360 */
	       double s;  /* saturation (0-1) */
	       double v;  /* value (0-1) */
	   };
       </code>

       <code>
	   pixel
	   ppm_color_from_hsv(struct hsv const hsv,
			      pixval	 const maxval);
       </code>

       <code>
	   struct hsv
	   ppm_hsv_from_color(pixel  const color,
			      pixval const maxval);
       </code>

       These convert a color between from pixel (RGB) form and HSV.

       <code>
	   pixval
	   ppm_saturation(pixel	 const p,
			  pixval const maxval);
       </code>

       This gives you the saturation of a color, as a pixval.	(e.g.  if  the
       saturation of p is 50% and maxval is 100, ppm_saturation() returns 50).

       Berlin-Kay Color

       Brent Berlin and Paul Kay in 1969 did a study which identified a set of
       11 basic colors people universally recognize.  They are:

       ·      black

       ·      gray

       ·      white

       ·      red

       ·      orange

       ·      yellow

       ·      green

       ·      blue

       ·      violet

       ·      purple

       ·      brown

       The bk_color type represents a color from this set:

       <code>
	   typedef enum {
	       BKCOLOR_BLACK = 0,
	       BKCOLOR_GRAY,
	       BKCOLOR_WHITE,
	       BKCOLOR_RED,
	       BKCOLOR_ORANGE,
	       BKCOLOR_YELLOW,
	       BKCOLOR_GREEN,
	       BKCOLOR_BLUE,
	       BKCOLOR_VIOLET,
	       BKCOLOR_PURPLE,
	       BKCOLOR_BROWN
	   } bk_color;
       </code>

       You can use this as an index of an array, in which case you might  also
       want  macro  BKCOLOR_COUNT,  which  is  the number of colors in the set
       (11).

       To translate between the bk_color type and the  English	names  of  the
       colors, use ppm_bk_color_from_name() and ppm_name_from_bk_color():

       <code>
	   bk_color
	   ppm_bk_color_from_name(const char * name);

	   const char *
	   ppm_name_from_bk_color(bk_color bkColor);
       </code>

       ppm_bk_color_from_color() tells you to which Berlin-Kay color a certain
       color is closest, by way of a fuzzy color matching algorithm:

       <code>
	   bk_color
	   ppm_bk_color_from_color(pixel  color,
				   pixval maxval);
       </code>

       maxval is the maxval on which color is based.

       ppm_color_from_bk_color() converts the opposite way: given a Berlin-Kay
       color, it gives the color, in pixel form, that best represents it.

       <code>
	   pixel
	   ppm_color_from_bk_color(bk_color bkColor,
				   pixval   maxval);
       </code>

       maxval is the maxval on which the returned color is based.

       All  of	the  facilities in this section were new in Netpbm 10.34 (June
       2006).

   COLOR NAMES
       System Color Dictionary

       Netpbm  uses  the   system's   X11   color   dictionary	 (usually   in
       /usr/lib/X11/rgb.txt).  This is the same file the X Window System typi‐
       cally uses to associate colors with their names.

       The color dictionary that Netpbm uses is in the file whose name is  the
       value of the RGBDEF environment variable.  If RGBDEF is not set, Netpbm
       defaults to the first existing file from this list:

       ·      /usr/lib/X11/rgb.txt

       ·      /usr/openwinlib/rgb.txt

       ·      /usr/X11R6/lib/X11/rgb.txt

       You can see the color names from a typical X11 color dictionary,	 which
       is  probably  very close to what is on your system, along with the col‐
       ors, here ⟨http://www.swiss.ai.mit.edu/~jaffer/Color/x11.pdf⟩  .	  This
       website (1) shows a bunch of other versions you could use.

       Netpbm  is packaged with a color dictionary.  A standard Netpbm instal‐
       lation installs this file as "misc/rgb.txt" in  the  Netpbm  directory.
       This  color dictionary has colors from everywhere the Netpbm maintainer
       could find them, and is a superset of XFree 86's color dictionary.

       <H4 id="ppm_parsecolor">ppm_parsecolor</H4>

       ppm_parsecolor() interprets a color specification and returns  a	 pixel
       of the color that it indicates.	The color specification is ASCII text,
       in one of these formats:

       ·      a name, as defined in the system color dictionary ⟨#rgb.txt⟩ .

       ·
	       An X11-style hexadecimal specifier: rgb:r/g/b, where r, g,  and
	      b	 are  each  1-	to 4-digit hexadecimal numbers.	 For each, the
	      maxval is the maximum number that can be represented in the num‐
	      ber of hexadecimal digits given.	Example: rgb:01/ff/8000 speci‐
	      fies 1/255 red intensity, maximum	 green	intensity,  and	 about
	      half blue intensity.

       ·
	       An  X11-style  decimal specifier: rgbi:r/g/b, where r, g, and b
	      are floating point numbers from 0 to 1.

       ·      an old-X11-style hexadecimal triple: #rgb, #rrggbb,  #rrrgggbbb,
	      or #rrrrggggbbbb.

       ·      A	 triplet  of  decimal  floating point numbers from 0.0 to 1.0,
	      representing red, green, and blue intensities respectively, sep‐
	      arated by commas.	 E.g. 1.0,0.5,.25.  This is for backwards com‐
	      patibility; it was in use before MIT came up  with  the  similar
	      and preferred rgbi style).

       If  the	color  specification does not conform to any of these formats,
       including the case that it is a name, but is not in  the	 system	 color
       dictionary, ppm_parsecolor() throwsanerror(1).

       <h4 id="ppm_colorname">ppm_colorname</h4>

       ppm_colorname()	returns a string that describes the color of the given
       pixel.  If a system color dictionary ⟨#rgb.txt⟩	is available  and  the
       color appears in it, ppm_colorname() returns the name of the color from
       the file.  If the color does not appear in a  system  color  dictionary
       and hexok is true, ppm_colorname() returns a hexadecimal color specifi‐
       cation triple (#rrggbb).	 If a system color dictionary is available but
       the  color  does	 not  appear in it and hexok is false, ppm_colorname()
       returns the name of the closest	matching  color	 in  the  color	 file.
       Finally,	 if there is no system color dictionary available and hexok is
       false, ppm_colorname() fails and exits the program with an  error  mes‐
       sage.

       The  string returned is in static libppm library storage which is over‐
       written by every call to ppm_colorname().

       <h4 id="ppm_readcolornamefile">ppm_readcolornamefile</h4>

       ppm_readcolornamefile() reads the entire contents of the color  dictio‐
       nary  in	 the  file  named fileName into data structures you can use to
       access it easily.

       The function returns all the color names as an array of null-terminated
       strings.	  It  mallocs the space for this array and returns its address
       at colornamesP.	(*colornamesP)[i] is the address of the first  charac‐
       ter  in the null-terminated string that is the name of the ith color in
       the dictionary.

       The  function  also  returns  a	colorhash_table	 (see  COLOR  INDEXING
       ⟨#colorindex⟩  )	 that  matches	all these color names up to the colors
       they represent.	It mallocs  the	 space	for  the  colorhash_table  and
       returns its address at chtP.  The number that the colorhash_table asso‐
       ciates with each color is the index into the color name array described
       above of the name of that color.

       You  may	 specify  a  null pointer for fileName to indicate the default
       color dictionary.

       mustOpen is a boolean.  If it is nonzero, the function fails and aborts
       the  program  if	 it  is	 unable to open the specified color dictionary
       file.  If it is zero, though, it simply treats an unopenable color dic‐
       tionary as an empty one.	 The colorhash and color name array it returns
       contain no colors or names.

       ppm_readcolornamefile() was new in Netpbm 10.15 (April 2003).

   COLOR INDEXING
       Sometimes in processing images, you want to associate a	value  with  a
       particular color.  Most often, that's because you're generating a color
       mapped graphics format.	In a color mapped graphics format, the	raster
       contains	 small	numbers,  and the file contains a color map that tells
       what color each of those small numbers refers to.  If  your  image  has
       only  256  colors,  but	each color takes 24 bits to describe, this can
       make your output file much smaller than a  straightforward  RGB	raster
       would.

       So,  continuing the above example, say you have a pixel value for char‐
       treuse and in your output file and you are  going  to  represent	 char‐
       treuse  by  the	number 12.  You need a data structure that allows your
       program quickly to find out that the number for a chartreuse  pixel  is
       12.  Netpbm's color indexing data types and functions give you that.

       colorhash_table	is  a C data type that associates an integer with each
       of an arbitrary number of colors.  It is a hash table, so it  uses  far
       less space than an array indexed by the color's RGB values would.

       The  problem with a colorhash_table is that you can only look things up
       in it.  You can't find out what	colors	are  in	 it.   So  Netpbm  has
       another data type for representing the same information, the poorly but
       historically named colorhist_vector.  A	colorhist_vector  is  just  an
       array.	Each  entry  represents a color and contains the color's value
       (as a pixel) and the integer value associated with it.  The entries are
       filled  in starting with subscript 0 and going consecutively up for the
       number of colors in the histogram.

       (The reason the name is poor is because a color histogram is  only  one
       of many things that could be represented by it).

       colorhash_table ppm_alloccolorhash()

       This  creates  a	 colorhash_table  using dynamically allocated storage.
       There are no colors in it.  If there is not enough  storage,  it	 exits
       the program with an error message.

       void ppm_freecolorhash()

       This destroys a ppm_freecolorhash  and frees all the storage associated
       with it.

       int ppm_addtocolorhash( colorhash_table cht, const pixel *  const  col‐
       orP, const int value)

       This adds the specified color to the specified colorhash_table
	and associates the specified value with it.

       You  must ensure that the color you are adding isn't already present in
       the colorhash_table.

       There is no way to update an entry or  delete  an  entry	 from  a  col‐
       orhash_table.

       int  ppm_lookupcolor(  const  colorhash_table  cht, const pixel * const
       colorP )

       This looks up the specified color in the specified colorhash_table.  It
       returns the integer value associated with that color.

       If  the	specified color is not in the hash table, the function returns
       -1.  (So if you assign the value -1 to a color,	the  return  value  is
       ambiguous).

       colorhist_vector ppm_colorhashtocolorhist( const colorhash_table cht,

       const int ncolors )

       This  converts  a  colorhash_table  to  a colorhist_vector.  The return
       value is a new colorhist_vector which you  must	eventually  free  with
       ppm_freecolorhist().

       ncolors	is  the	 number	 of colors in cht.  If it has more colors than
       that, ppm_colorhashtocolorhist does not create a	 colorhist_vector  and
       returns NULL.

       colorhash_table	ppm_colorhisttocolorhash(  const colorhist_vector chv,
       const int ncolors )

       This poorly named function does not convert from a colorhist_vector  to
       a colorhash_table.

       It does create a colorhash_table based on a colorhist_vector input, but
       the integer value for a given color in the output is not	 the  same  as
       the  integer  value for that same color in the input.  ppm_colorhistto‐
       colorhash() ignores the integer values in the input.   In  the  output,
       the  integer value for a color is the index in the input colorhist_vec‐
       tor for that color.

       You can easily create a color map for an image by running  ppm_compute‐
       colorhist()   over  the image, then ppm_colorhisttocolorhash() over the
       result.	Now you can use ppm_lookupcolor() to find a unique color index
       for any pixel in the input.

       If  the	same  color  appears  twice  in the input, ppm_colorhisttocol‐
       orhash()	 exit the program with an error message.

       ncolors is the number of colors in chv.

       The return value is a new colorhash_table  which	 you  must  eventually
       free with ppm_freecolorhash().

   COLOR HISTOGRAMS
       The  Netpbm  libraries give you functions to examine a Netpbm image and
       determine what colors are in it and how many pixels of each  color  are
       in  it.	 This  information is known as a color histogram.  Netpbm uses
       its colorhash_table data type to represent a color histogram.

       colorhash_table ppm_computecolorhash( pixel ** const pixels, const  int
       cols, const int rows, const int maxcolors, int* const colorsP )

       This poorly but historically named function generates a colorhash_table
       whose value for each color is the number of pixels in a specified image
       that  have  that	 color.	  (I.e.	 a  color  histogram).	As a bonus, it
       returns the number of colors in the image.

       (It's poorly named because not  all  colorhash_tables  are  color  his‐
       tograms, but that's all it generates).

       pixels, cols, and rows describe the input image.

       maxcolors is the maximum number of colors you want processed.  If there
       are more colors that that in the	 input	image,	ppm_computecolorhash()
       returns	NULL  as  its  return value and stops processing as soon as it
       discovers this.	This makes it run faster and use less memory.  One use
       for  maxcolors  is  when	 you  just want to find out whether or not the
       image has more than N colors and don't want to wait to generate a  huge
       color  table  if so.  If you don't want any limit on the number of col‐
       ors, specify maxcolors=0.

       ppm_computecolorhash() returns the actual number of colors in the image
       as *colorsP, but only if it is less than or equal to maxcolors.

       colorhash_table	ppm_computecolorhash2(	FILE  *	 const	ifp, const int
       cols, const int rows, const pixval maxval, const int format,

       const int maxcolors, int* const colorsP )

       This is the same as ppm_computecolorhash() except that instead of feed‐
       ing  it	an array of pixels in storage, you give it an open file stream
       and it reads the image from the file.   The  file  must	be  positioned
       after  the header, at the raster.  Upon return, the file is still open,
       but its position is undefined.

       maxval and format are the values for the image (i.e.  information  from
       the file's header).

       colorhist_vector	 ppm_computecolorhist(	pixel ** pixels, int cols, int
       rows, int maxcolors, int * colorsP )

       This is like ppm_computecolorhash()  except  that  it  creates  a  col‐
       orhist_vector instead of a colorhash_table.

       If  you supply a nonzero maxcolors argument, that is the maximum number
       of colors you expect to find in the input image.	  If  there  are  more
       colors than you say in the image, ppm_computecolorhist() returns a null
       pointer as its return value and nothing meaningful as *colorsP.

       If not, the function returns the new colorhist_vector   as  its	return
       value  and  the	actual number of colors in the image as *colorsP.  The
       returned array has space allocated for the specified number  of	colors
       regardless  of how many actually exist.	The extra space is at the high
       end of the array and is available for your use in  expanding  the  col‐
       orhist_vector.

       If  you	specify maxcolors=0, there is no limit on the number of colors
       returned and the return array has space for 5 extra colors at the  high
       end for your use in expanding the colorhist_vector.

       colorhist_vector ppm_computecolorhist2( FILE * ifp, int cols, int rows,
       int maxcolors, pixval maxval, int format, int * colorsP )

       This is the same as ppm_computecolorhist() except that instead of feed‐
       ing  it	an array of pixels in storage, you give it an open file stream
       and it reads the image from the file.   The  file  must	be  positioned
       after  the header, at the raster.  Upon return, the file is still open,
       but its position is undefined.

SEE ALSO
       pbm(1), pgm(1), libpbm(1)

AUTHOR
       Copyright (C) 1989, 1991 by Tony Hansen and Jef Poskanzer.

netpbm documentation		 22 July 2User manual for old ppm functions(3)
[top]

List of man pages available for YellowDog

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net