From 17f2393679c8c0fd6051e27d6ced8a9af3075f28 Mon Sep 17 00:00:00 2001 From: Joshua Grams Date: Wed, 6 Apr 2005 20:59:31 +0000 Subject: [PATCH 1/1] * pnmoutline.c: actually works now. Stupid, stupid libnetpbm. --- pnmoutline.c | 72 +++++++++++++++++++++++++++------------------------------- 1 file changed, 33 insertions(+), 39 deletions(-) diff --git a/pnmoutline.c b/pnmoutline.c index 8a718bb..1315da5 100644 --- a/pnmoutline.c +++ b/pnmoutline.c @@ -6,7 +6,7 @@ tuple *inrows[3]; tuple *outrow; void -clear_inrow(struct pam *p, tuple *row) +row_fill_black(struct pam *p, tuple *row) { int i, j; @@ -15,16 +15,6 @@ clear_inrow(struct pam *p, tuple *row) row[i][j]=0; } -void -clear_outrow(struct pam *p, tuple *row) -{ - int i,j; - - for(i=0; iwidth; i++) - for(j=0; j<3; j++) - row[i][j]=p->maxval; -} - int is_black(unsigned int row, unsigned int column) { @@ -40,44 +30,52 @@ is_edge(unsigned int column) unsigned int n = 0; if(is_black(0,column)) n++; if(is_black(2,column)) n++; - if(is_black(1,column-1)) n++; - if(is_black(1,column+1)) n++; - return n==2 || n==3; + if(column == 0 || is_black(1, column-1)) n++; + if(column == outpam.width-1 || is_black(1, column+1)) n++; + return n>1 && n<4; } void -set_white(unsigned int column) +set_black(unsigned int column) { sample *s = outrow[column]; - s[0]=255; s[1]=255; s[2]=255; + s[0]=0; s[1]=0; s[2]=0; } void -set_black(unsigned int column) +set_white(unsigned int column) { sample *s = outrow[column]; - s[0]=0; s[1]=0; s[2]=0; + s[0]=255; s[1]=255; s[2]=255; } void -copy_tuple(unsigned int column) +copy_tuple(sample *dest, sample *src) { - sample *src, *dest; - - src = inrows[1][column]; - dest = outrow[column]; dest[0] = src[0]; dest[1] = src[1]; dest[2] = src[2]; } void -read_row(unsigned int q) +copy_row(struct pam *p, tuple *dest, tuple *src) +{ + int i; + + for(i=0; iwidth; i++) copy_tuple(dest[i], src[i]); +} + +void +next_row(unsigned int read) { + copy_row(&outpam, inrows[0], inrows[1]); + copy_row(&outpam, inrows[1], inrows[2]); + /* memcpy(inrows[0], inrows[1], outpam.width*sizeof(sample)*3); memcpy(inrows[1], inrows[2], outpam.width*sizeof(sample)*3); - if(q) pnm_readpamrow(&inpam, inrows[2]+1); - else clear_inrow(&outpam, inrows[2]); + */ + if(read) pnm_readpamrow(&inpam, inrows[2]+1); + else row_fill_black(&outpam, inrows[2]); } @@ -94,28 +92,24 @@ main(int argc, char **argv) outpam.file = stdout; pnm_writepaminit(&outpam); - outrow = pnm_allocpamrow(&outpam); - for(i=0; i<3; i++) inrows[i] = pnm_allocpamrow(&outpam); - for(i=0; i<3; i++) clear_inrow(&outpam, inrows[i]); + for(i=0; i<3; i++) { + inrows[i] = pnm_allocpamrow(&outpam); + row_fill_black(&outpam, inrows[i]); + } - clear_outrow(&outpam, outrow); - pnm_writepamrow(&outpam, inrows[0]); + outrow = pnm_allocpamrow(&outpam); - pnm_readpamrow(&inpam, inrows[1]+1); - for(row=0; row < inpam.height; row++) { - for(column=1; column<=inpam.width; column++) { + for(row=0; row < outpam.height; row++) { + next_row(row < inpam.height); + for(column=0; column