diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2006-11-28 06:14:47 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2006-11-28 06:14:47 +0000 |
commit | 42981754a445355aac8d62efdd276ba96fcdac03 (patch) | |
tree | 195742bf12807c159b5f35f0cd2bbc31c16d44d7 /lib | |
parent | 352e360cc05a80c3338a73a355d34be3b181ea4b (diff) | |
download | netpbm-mirror-42981754a445355aac8d62efdd276ba96fcdac03.tar.gz netpbm-mirror-42981754a445355aac8d62efdd276ba96fcdac03.tar.xz netpbm-mirror-42981754a445355aac8d62efdd276ba96fcdac03.zip |
Fix -background with PGM/PBM input - pnmrotate, pnmshear
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@156 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libpnm3.c | 42 | ||||
-rw-r--r-- | lib/pnm.h | 5 | ||||
-rw-r--r-- | lib/ppm.h | 17 |
3 files changed, 63 insertions, 1 deletions
diff --git a/lib/libpnm3.c b/lib/libpnm3.c index 80ccadfa..c7951546 100644 --- a/lib/libpnm3.c +++ b/lib/libpnm3.c @@ -345,3 +345,45 @@ xeltopixel(xel const inputxel) { PNM_GET1(inputxel), PNM_GET1(inputxel), PNM_GET1(inputxel)); return outputpixel; } + + + +xel +pnm_parsecolorxel(const char * const colorName, + xelval const maxval, + int const format) { + + pixel const bgColor = ppm_parsecolor(colorName, maxval); + + xel retval; + + switch(PNM_FORMAT_TYPE(format)) { + case PPM_TYPE: + PNM_ASSIGN(retval, + PPM_GETR(bgColor), PPM_GETG(bgColor), PPM_GETB(bgColor)); + break; + case PGM_TYPE: + if (PPM_ISGRAY(bgColor)) + PNM_ASSIGN1(retval, PPM_GETB(bgColor)); + else + pm_error("Non-gray color '%s' specified for a " + "grayscale (PGM) image", + colorName); + break; + case PBM_TYPE: + if (PPM_EQUAL(bgColor, ppm_whitepixel(maxval))) + PNM_ASSIGN1(retval, maxval); + else if (PPM_EQUAL(bgColor, ppm_blackpixel())) + PNM_ASSIGN1(retval, 0); + else + pm_error ("Color '%s', which is neither black nor white, " + "specified for a black and white (PBM) image", + colorName); + break; + default: + pm_error("Invalid format code %d passed to pnm_parsecolor()", + format); + } + + return retval; +} diff --git a/lib/pnm.h b/lib/pnm.h index f4469bf5..354eacf9 100644 --- a/lib/pnm.h +++ b/lib/pnm.h @@ -126,6 +126,11 @@ pnm_promoteformatrow(xel* xelrow, int cols, xelval maxval, int format, pixel xeltopixel(xel const inputxel); +xel +pnm_parsecolorxel(const char * const colorName, + xelval const maxval, + int const format); + #ifdef __cplusplus } #endif diff --git a/lib/ppm.h b/lib/ppm.h index 622d3e09..7f7d6446 100644 --- a/lib/ppm.h +++ b/lib/ppm.h @@ -58,7 +58,22 @@ typedef struct { ((f) == PPM_FORMAT || (f) == RPPM_FORMAT ? PPM_TYPE : PGM_FORMAT_TYPE(f)) -/* Declarations of routines. */ +static __inline__ pixel +ppm_whitepixel(pixval maxval) { + + pixel retval; + PPM_ASSIGN(retval, maxval, maxval, maxval); + + return retval; +} + +static __inline__ pixel +ppm_blackpixel(void) { + + pixel const retval = {0, 0, 0}; + + return retval; +} void ppm_init(int * argcP, char* argv[]); |