9 int line, bpp, x, y, dx, dy;
19 sysfatal("can't handle channel type %s", chantostr(buf, chan));
34 if((w = allocmemimage(m->r, GREY8)) == nil)
35 sysfatal("allocmemimage: %r");
36 memimagedraw(w, w->r, m, m->r.min, nil, ZP, S);
44 if((w = allocmemimage(Rect(m->r.min.x, m->r.min.y, dy, dx), m->chan)) == nil)
45 sysfatal("allocmemimage: %r");
46 line = w->width*sizeof(ulong);
48 s = byteaddr(m, addpt(m->r.min, Pt(0, y)));
49 d = byteaddr(w, addpt(w->r.min, Pt(dy-y-1, 0)));
67 if((m = allocmemimage(w->r, chan)) == nil)
68 sysfatal("allocmemimage: %r");
69 memimagedraw(m, m->r, w, w->r.min, nil, ZP, S);
83 w = m->width * sizeof(ulong);
84 if((t = malloc(w)) == nil)
85 sysfatal("malloc: %r");
86 for(y=0; y<dy/2; y++){
87 s = byteaddr(m, addpt(m->r.min, Pt(0, y)));
88 d = byteaddr(m, addpt(m->r.min, Pt(0, dy-y-1)));
100 return rot90(rot180(m));
106 fprint(2, "usage: %s -r degree [ file ]\n", argv0);
111 main(int argc, char *argv[])
120 r = atoi(EARGF(usage()));
126 fd = open(*argv, OREAD);
128 sysfatal("open: %r");
131 if((m = readmemimage(fd)) == nil)
132 sysfatal("readmemimage: %r");
144 if(writememimage(1, m) < 0)
145 sysfatal("writememimage: %r");