topng.c (1116B)
1 #include <u.h> 2 #include <libc.h> 3 #include <draw.h> 4 #include <memdraw.h> 5 #include <ctype.h> 6 #include <bio.h> 7 #include <flate.h> 8 #include "imagefile.h" 9 10 void 11 usage(void) 12 { 13 fprint(2, "usage: topng [-c 'comment'] [-g 'gamma'] [file]\n"); 14 exits("usage"); 15 } 16 17 void 18 main(int argc, char *argv[]) 19 { 20 Biobuf bout; 21 Memimage *i; 22 int fd; 23 char *err, *filename; 24 ImageInfo II; 25 26 ARGBEGIN{ 27 case 'c': 28 II.comment = ARGF(); 29 if(II.comment == nil) 30 usage(); 31 II.fields_set |= II_COMMENT; 32 break; 33 case 'g': 34 II.gamma = atof(ARGF()); 35 if(II.gamma == 0.) 36 usage(); 37 II.fields_set |= II_GAMMA; 38 break; 39 case 't': 40 break; 41 default: 42 usage(); 43 }ARGEND 44 45 if(Binit(&bout, 1, OWRITE) < 0) 46 sysfatal("Binit failed: %r"); 47 memimageinit(); 48 49 if(argc == 0){ 50 fd = 0; 51 filename = "<stdin>"; 52 }else{ 53 fd = open(argv[0], OREAD); 54 if(fd < 0) 55 sysfatal("can't open %s: %r", argv[0]); 56 filename = argv[0]; 57 } 58 59 i = readmemimage(fd); 60 if(i == nil) 61 sysfatal("can't readimage %s: %r", filename); 62 close(fd); 63 64 err = memwritepng(&bout, i, &II); 65 freememimage(i); 66 67 if(err != nil) 68 fprint(2, "topng: %s\n", err); 69 exits(err); 70 }