Got questions, comments, patches, etc.?
Contact Jason Woofenden
gitweb
/
vor.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
a3057d0
)
* pnmoutline.c: actually works now. Stupid, stupid libnetpbm.
author
Joshua Grams
<josh@qualdan.com>
Wed, 6 Apr 2005 20:59:31 +0000
(20:59 +0000)
committer
Joshua Grams
<josh@qualdan.com>
Wed, 6 Apr 2005 20:59:31 +0000
(20:59 +0000)
pnmoutline.c
patch
|
blob
|
history
diff --git
a/pnmoutline.c
b/pnmoutline.c
index
8a718bb
..
1315da5
100644
(file)
--- a/
pnmoutline.c
+++ b/
pnmoutline.c
@@
-6,7
+6,7
@@
tuple *inrows[3];
tuple *outrow;
void
tuple *outrow;
void
-clear_inrow(struct pam *p, tuple *row)
+row_fill_black(struct pam *p, tuple *row)
{
int i, j;
{
int i, j;
@@
-15,16
+15,6
@@
clear_inrow(struct pam *p, tuple *row)
row[i][j]=0;
}
row[i][j]=0;
}
-void
-clear_outrow(struct pam *p, tuple *row)
-{
- int i,j;
-
- for(i=0; i<p->width; i++)
- for(j=0; j<3; j++)
- row[i][j]=p->maxval;
-}
-
int
is_black(unsigned int row, unsigned int column)
{
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++;
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
}
void
-set_white(unsigned int column)
+set_black(unsigned int column)
{
sample *s = outrow[column];
{
sample *s = outrow[column];
- s[0]=255; s[1]=255; s[2]=255;
+ s[0]=0; s[1]=0; s[2]=0;
}
void
}
void
-set_black(unsigned int column)
+set_white(unsigned int column)
{
sample *s = outrow[column];
{
sample *s = outrow[column];
- s[0]=0; s[1]=0; s[2]=0;
+ s[0]=255; s[1]=255; s[2]=255;
}
void
}
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
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; i<p->width; 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);
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);
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<outpam.width; column++) {
if(is_black(1,column)) {
if(is_edge(column)) set_black(column);
else set_white(column);
if(is_black(1,column)) {
if(is_edge(column)) set_black(column);
else set_white(column);
- } else copy_tuple(column);
+ } else copy_tuple(outrow[column], inrows[1][column]);
}
pnm_writepamrow(&outpam, outrow);
}
pnm_writepamrow(&outpam, outrow);
- read_row(row != inpam.height-1);
}
}
- clear_outrow(&outpam, outrow);
- pnm_writepamrow(&outpam, inrows[2]);
-
pnm_freepamrow(outrow);
for(i=0; i<3; i++) pnm_freepamrow(inrows[i]);
return 0;
pnm_freepamrow(outrow);
for(i=0; i<3; i++) pnm_freepamrow(inrows[i]);
return 0;