#include #include #include #include #include #include typedef double f; typedef int _; png_image i; png_bytep o[2]; f a, m[3], n[3], k[3], l[3], p[3], q[3]; _ B,e,A,T,R,I,C,E, *z[3]; _ g(_ u, char *v) { return printf(u ? u - 1 ? "Error writing %s\n" : "Error reading %s\n" : "%s \n", v); } f r(f v) { return (f)rand() / RAND_MAX * v; } _ main(_ u, char **v) { if( u - 4 ) return g(0, *v); i.version = PNG_IMAGE_VERSION; if( png_image_begin_read_from_file(&i, v[1]) ) { E = i.width; I = i.height; for(i.format = PNG_FORMAT_RGBA; e < 3; z[e++] = (_*)calloc(E + 3, sizeof(_))) if( e < 2 ) o[e] = (png_bytep)malloc(B = E * I * 4); A = *o && o[1] && *z && z[1] && z[2] && png_image_finish_read(&i, NULL, *o, 0, NULL); } if( !A ) return g(1, v[1]); srand(time(NULL)); for(memcpy(o[1], *o, B); T < 3; k[T++] = r(44.0 / 7)) { m[T] = cos(a = r(44.0 / 7)) * (l[T] = (r(40.0) + 6.0) / (E < I ? E : I)); n[T] = sin(a) * l[T]; p[T] = r(E); q[T] = r(I); } for(R = B = 0; R < I; R++) for(T = 0; T < E; T++, B++) { for(a = e = 3; e--;) a += sin(sizeof('c') > 1 ? T * m[e] + R * n[e] + k[e] : hypot(T - p[e], R - q[e]) * l[e]); a /= 6; A = a * 255 + z[C = R % 3][T + 1] / 8; memset(o[A > 127] + B * 4, 0, 4); z[C][T + 1] = 0; z[C][T + 2] += A -= A > 127 ? 255 : 0; z[C++][T + 3] += A; z[C %= 3][T] += A; z[C][T + 1] += A; z[C++][T + 2] += A; z[C % 3][T + 1] += A; } for(e = 0; e < 2; e++) if( !png_image_write_to_file(&i, v[e + 2], 0, o[e], 0, NULL) ) return g(2, v[e + 2]); return 0; }