diff options
| author | Charles.Forsyth <devnull@localhost> | 2006-12-30 21:29:14 +0000 |
|---|---|---|
| committer | Charles.Forsyth <devnull@localhost> | 2006-12-30 21:29:14 +0000 |
| commit | 0e96539ff7cff23233d3f0a64bb285b385a3a1f4 (patch) | |
| tree | 5e5363878c35855f236b12cd85ae13d9102b42bc /utils/cvbit | |
| parent | 6e425a9de8c003b5a733621a6b6730ec3cc902b8 (diff) | |
20061219
Diffstat (limited to 'utils/cvbit')
| -rw-r--r-- | utils/cvbit/cvbit.c | 86 | ||||
| -rw-r--r-- | utils/cvbit/mkfile | 15 |
2 files changed, 101 insertions, 0 deletions
diff --git a/utils/cvbit/cvbit.c b/utils/cvbit/cvbit.c new file mode 100644 index 00000000..dcd140f0 --- /dev/null +++ b/utils/cvbit/cvbit.c @@ -0,0 +1,86 @@ +#include <u.h> +#include <libc.h> +#include <draw.h> +#include <memdraw.h> +#include <pool.h> + +static int invert = 0; + +void +main(int argc, char **argv) +{ + Memimage *im, *om; + char *s; + ulong ofmt; + + ofmt = 0; + ARGBEGIN{ + case 'i': + invert = 1; + break; + case 'c': + s = ARGF(); + if(s==nil) + break; + ofmt = strtochan(s); + if(ofmt == 0){ + fprint(2, "cvbit: bad chan: %s\n", s); + exits("chan"); + } + break; + }ARGEND + + memimageinit(); + im = readmemimage(0); + if(im == nil){ + fprint(2, "cvbit: can't read image: %r\n"); + exits("read"); + } + if(ofmt){ + om = allocmemimage(im->r, ofmt); + if(om == nil){ + fprint(2, "cvbit: can't allocate new image: %r\n"); + exits("alloc"); + } + memimagedraw(om, om->r, im, im->r.min, nil, ZP, S); + }else + om = im; + if(invert){ + uchar *buf; + int bpl, y, x; + + bpl = bytesperline(om->r, om->depth); + buf = malloc(bpl); + for(y=om->r.min.y; y<om->r.max.y; y++){ + if(unloadmemimage(om, Rpt(Pt(om->r.min.x,y), Pt(om->r.max.x,y+1)), buf, bpl) != bpl){ + fprint(2, "cvbit: can't unload image line\n"); + exits("unload"); + } + for(x=0; x<bpl; x++) + buf[x] ^= 0xFF; + if(loadmemimage(om, Rpt(Pt(om->r.min.x,y), Pt(om->r.max.x,y+1)), buf, bpl) != bpl){ + fprint(2, "cvbit: can't load image line\n"); + exits("load"); + } + } + } + if(writememimage(1, om) < 0){ + fprint(2, "cvbit: can't write image: %r\n"); + exits("write"); + } + exits(nil); +} + +char* +poolname(Pool *p) +{ + USED(p); + return "none"; +} + +void +poolsetcompact(Pool *p, void (*f)(void*, void*)) +{ + USED(p); + USED(f); +} diff --git a/utils/cvbit/mkfile b/utils/cvbit/mkfile new file mode 100644 index 00000000..8d4b853a --- /dev/null +++ b/utils/cvbit/mkfile @@ -0,0 +1,15 @@ +<../../mkconfig + +TARG=cvbit + +OFILES= cvbit.$O\ + +HFILES= \ + $ROOT/include/draw.h\ + $ROOT/include/memdraw.h\ + +LIBS= draw memdraw draw bio 9 + +BIN=$ROOT/$OBJDIR/bin + +<$ROOT/mkfiles/mkone-$SHELLTYPE |
