Looks nice. A couple of questions:
* why have fixed-size width and height fields if they're between "blank" bytes? Is for simpler read code? * is "blank" ASCII-blank, or '0x00'? (From the write-code, it looks like ASCII) On 15 July 2014 17:28, FRIGN <d...@frign.de> wrote: > On Mon, 14 Jul 2014 14:54:42 -0400 > Charlie Murphy <cmsmur...@gmail.com> wrote: > >> [1]: http://pastebin.com/vZEcxte3 > > As this expires, here's the full text: > > ### > > This is an easy-to-parse image format that works well in pipelines. > Inspired by Netpbm and the Plan 9 image format. > > Bytes Description > 9 ASCII string: "imagefile" > 1 Blank > 9 Right-justified, blank-padded ASCII string containing width. > 1 Blank > 9 Right-justified, blank-padded ASCII string containing height. > 1 Blank > > Then, (width*height) pixels in the form of RGBA, where each channel > is one byte. > > This function reads an image: > > int > readimage(int fd, int *wp, int *hp, char **datap) > { > char buf[30]; > int w, h, total; > char *data; > > if (read(fd, buf, 30) != 30) > return -1; > > buf[9] = '\0'; > buf[19] = '\0'; > buf[29] = '\0'; > > if (strcmp(buf, "imagefile") != 0) > return -1; > > w = atoi(buf+10); > h = atoi(buf+20); > total = w*h*4; > > data = malloc(total); > if (!data) > return -1; > > if (read(fd, data, total) != total) { > free(data); > return -1; > } > > *wp = w; > *hp = h; > *datap = datap; > > return 0; > } > > This function writes an image: > > int > writeimage(int fd, int w, int h, char *data) > { > if (dprintf(fd, "imagefile %9d %9d ", w, h) < 0) > return -1; > if (write(fd, data, w*h*4) != w*h*4) > return -1; > return 0; > } > > -Anonymous > > ### > > -- > FRIGN <d...@frign.de> >