ref: c3ba64f6935322f09b6de5c2285544fd471c605d
dir: /sys/src/cmd/jpg/topng.c/
#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); }