ref: 048812d8e57dd440e13737c9c603cedc0228891b
dir: /unsubpixelize.c/
#include <u.h>
#include <libc.h>
#include <draw.h>
#include <memdraw.h>
static void
transformpx(Memimage *src, Memimage *dst, Point p)
{
uchar *s;
uchar *t;
int c;
t = byteaddr(dst, p);
c = p.x % 3;
p.x /= 3;
p.y /= 3;
s = byteaddr(src, p);
t[0] = t[1] = t[2] = s[2-c];
}
static void
transform(Memimage *src, Memimage *dst)
{
int x, y;
for (y = dst->r.min.y; y < dst->r.max.y; y++)
for (x = dst->r.min.x; x < dst->r.max.x; x++)
transformpx(src, dst, Pt(x, y));
}
void
main(void)
{
Memimage *in, *out;
Rectangle r;
if (memimageinit() < 0)
sysfatal("%r");
in = readmemimage(0);
if (!in)
sysfatal("%r");
r.min.x = in->r.min.x * 3;
r.min.y = in->r.min.y * 3;
r.max.x = in->r.max.x * 3;
r.max.y = in->r.max.y * 3;
out = allocmemimage(r, RGB24);
if (!out)
sysfatal("%r");
transform(in, out);
writememimage(1, out);
exits(nil);
}