diff options
author | rsc <devnull@localhost> | 2004-04-21 22:19:33 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2004-04-21 22:19:33 +0000 |
commit | 28994509cc11ac6a5443054dfae1fedfb69039bc (patch) | |
tree | 9d5adcd11af2708db0ecc246e008c308ca0f97d4 /src/cmd/jpg/topng.c | |
parent | a01e58366c54804f15f84d6e21d13f2e4080977a (diff) | |
download | plan9port-28994509cc11ac6a5443054dfae1fedfb69039bc.tar.gz plan9port-28994509cc11ac6a5443054dfae1fedfb69039bc.tar.bz2 plan9port-28994509cc11ac6a5443054dfae1fedfb69039bc.zip |
Why not?
Diffstat (limited to 'src/cmd/jpg/topng.c')
-rw-r--r-- | src/cmd/jpg/topng.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/cmd/jpg/topng.c b/src/cmd/jpg/topng.c new file mode 100644 index 00000000..09c00613 --- /dev/null +++ b/src/cmd/jpg/topng.c @@ -0,0 +1,70 @@ +#include <u.h> +#include <libc.h> +#include <draw.h> +#include <memdraw.h> +#include <ctype.h> +#include <bio.h> +#include <flate.h> +#include "imagefile.h" + +void +usage(void) +{ + fprint(2, "usage: topng [-c 'comment'] [-g 'gamma'] [file]\n"); + exits("usage"); +} + +void +main(int argc, char *argv[]) +{ + Biobuf bout; + Memimage *i; + int fd; + char *err, *filename; + ImageInfo II; + + ARGBEGIN{ + case 'c': + II.comment = ARGF(); + if(II.comment == nil) + usage(); + II.fields_set |= II_COMMENT; + break; + case 'g': + II.gamma = atof(ARGF()); + if(II.gamma == 0.) + usage(); + II.fields_set |= II_GAMMA; + break; + case 't': + break; + default: + usage(); + }ARGEND + + if(Binit(&bout, 1, OWRITE) < 0) + sysfatal("Binit failed: %r"); + memimageinit(); + + if(argc == 0){ + fd = 0; + filename = "<stdin>"; + }else{ + fd = open(argv[0], OREAD); + if(fd < 0) + sysfatal("can't open %s: %r", argv[0]); + filename = argv[0]; + } + + i = readmemimage(fd); + if(i == nil) + sysfatal("can't readimage %s: %r", filename); + close(fd); + + err = memwritepng(&bout, i, &II); + freememimage(i); + + if(err != nil) + fprint(2, "topng: %s\n", err); + exits(err); +} |