head 1.3; access; symbols pkgsrc-2013Q2:1.3.0.54 pkgsrc-2013Q2-base:1.3 pkgsrc-2012Q4:1.3.0.52 pkgsrc-2012Q4-base:1.3 pkgsrc-2011Q4:1.3.0.50 pkgsrc-2011Q4-base:1.3 pkgsrc-2011Q2:1.3.0.48 pkgsrc-2011Q2-base:1.3 pkgsrc-2009Q4:1.3.0.46 pkgsrc-2009Q4-base:1.3 pkgsrc-2008Q4:1.3.0.44 pkgsrc-2008Q4-base:1.3 pkgsrc-2008Q3:1.3.0.42 pkgsrc-2008Q3-base:1.3 cube-native-xorg:1.3.0.40 cube-native-xorg-base:1.3 pkgsrc-2008Q2:1.3.0.38 pkgsrc-2008Q2-base:1.3 pkgsrc-2008Q1:1.3.0.36 pkgsrc-2008Q1-base:1.3 pkgsrc-2007Q4:1.3.0.34 pkgsrc-2007Q4-base:1.3 pkgsrc-2007Q3:1.3.0.32 pkgsrc-2007Q3-base:1.3 pkgsrc-2007Q2:1.3.0.30 pkgsrc-2007Q2-base:1.3 pkgsrc-2007Q1:1.3.0.28 pkgsrc-2007Q1-base:1.3 pkgsrc-2006Q4:1.3.0.26 pkgsrc-2006Q4-base:1.3 pkgsrc-2006Q3:1.3.0.24 pkgsrc-2006Q3-base:1.3 pkgsrc-2006Q2:1.3.0.22 pkgsrc-2006Q2-base:1.3 pkgsrc-2006Q1:1.3.0.20 pkgsrc-2006Q1-base:1.3 pkgsrc-2005Q4:1.3.0.18 pkgsrc-2005Q4-base:1.3 pkgsrc-2005Q3:1.3.0.16 pkgsrc-2005Q3-base:1.3 pkgsrc-2005Q2:1.3.0.14 pkgsrc-2005Q2-base:1.3 pkgsrc-2005Q1:1.3.0.12 pkgsrc-2005Q1-base:1.3 pkgsrc-2004Q4:1.3.0.10 pkgsrc-2004Q4-base:1.3 pkgsrc-2004Q3:1.3.0.8 pkgsrc-2004Q3-base:1.3 pkgsrc-2004Q2:1.3.0.6 pkgsrc-2004Q2-base:1.3 pkgsrc-2004Q1:1.3.0.4 pkgsrc-2004Q1-base:1.3 pkgsrc-2003Q4:1.3.0.2 pkgsrc-2003Q4-base:1.3 buildlink2-base:1.3 netbsd-1-3-PATCH003:1.2; locks; strict; comment @# @; 1.3 date 99.01.10.23.52.21; author tron; state dead; branches; next 1.2; 1.2 date 98.08.07.10.40.52; author agc; state Exp; branches; next 1.1; 1.1 date 98.07.15.19.52.58; author tron; state Exp; branches; next ; desc @@ 1.3 log @Major cleanup of "netpbm" package based on patches supply by John F. Woods in PR pkg/6763 and Rob Windsor in PR pkg/6779. @ text @$NetBSD: patch-by,v 1.2 1998/08/07 10:40:52 agc Exp $ --- ./pnm/tifftopnm.c.orig Mon Oct 4 05:12:01 1993 +++ ./pnm/tifftopnm.c Sun Aug 13 00:35:55 1995 @@@@ -54,7 +54,7 @@@@ int headerdump; register u_char sample; register int bitsleft; - unsigned short bps, spp, photomet; + unsigned short bps, spp, photomet, planarconfig; unsigned short* redcolormap; unsigned short* greencolormap; unsigned short* bluecolormap; @@@@ -101,6 +101,13 @@@@ spp = 1; if ( ! TIFFGetField( tif, TIFFTAG_PHOTOMETRIC, &photomet ) ) pm_error( "error getting photometric" ); + if( spp > 1 ){ + if ( ! TIFFGetField( tif, TIFFTAG_PLANARCONFIG, &planarconfig ) ) + pm_error( "error getting planarconfig" ); + }else{ + planarconfig = PLANARCONFIG_CONTIG; + } + switch ( spp ) { @@@@ -114,6 +121,18 @@@@ "can only handle 1-channel gray scale or 1- or 3-channel color" ); } + switch( planarconfig ) + { + case PLANARCONFIG_CONTIG: + break; + case PLANARCONFIG_SEPARATE: + if( photomet != PHOTOMETRIC_RGB ) + pm_error( "can only handle separate planes with RGB data" ); + break; + default: + pm_error("Unrecongnized PLANARCONFIG tag!\n"); + } + (void) TIFFGetField( tif, TIFFTAG_IMAGEWIDTH, &cols ); (void) TIFFGetField( tif, TIFFTAG_IMAGELENGTH, &rows ); @@@@ -259,20 +278,54 @@@@ break; case PHOTOMETRIC_RGB: - for ( col = 0; col < cols; ++col, ++xP ) - { - register xelval r, g, b; - - NEXTSAMPLE - r = sample; - NEXTSAMPLE - g = sample; - NEXTSAMPLE - b = sample; - if ( spp == 4 ) - NEXTSAMPLE /* skip alpha channel */ - PPM_ASSIGN( *xP, r, g, b ); - } + if( planarconfig == PLANARCONFIG_CONTIG ){ + for ( col = 0; col < cols; ++col, ++xP ) + { + register xelval r, g, b; + + NEXTSAMPLE + r = sample; + NEXTSAMPLE + g = sample; + NEXTSAMPLE + b = sample; + if ( spp == 4 ) + NEXTSAMPLE /* skip alpha channel */ + PPM_ASSIGN( *xP, r, g, b ); + } + }else{ + /* First clear the value and assign the reds */ + for ( col = 0; col < cols; ++col, ++xP ) + { + NEXTSAMPLE + PPM_ASSIGN( *xP, 0, 0, 0 ); + PPM_PUTR( *xP, sample ); + } + + /* Next the greens */ + if ( TIFFReadScanline( tif, buf, row, 1 ) < 0 ) + pm_error( "bad data read on green line %d", row ); + xP = xelrow; + inP = buf; + bitsleft = 8; + for ( col = 0; col < cols; ++col, ++xP ) + { + NEXTSAMPLE + PPM_PUTG( *xP, sample ); + } + + /* And finally the blues */ + if ( TIFFReadScanline( tif, buf, row, 2 ) < 0 ) + pm_error( "bad data read on green line %d", row ); + xP = xelrow; + inP = buf; + bitsleft = 8; + for ( col = 0; col < cols; ++col, ++xP ) + { + NEXTSAMPLE + PPM_PUTB( *xP, sample ); + } + } break; default: @ 1.2 log @Add NetBSD RCS Ids. @ text @d1 1 a1 1 $NetBSD$ @ 1.1 log @Add well known fixes for "netpbm-1mar1994" supplied by John F. Woods in PR pkg/5723. @ text @d1 2 @