picture engrave (picture pic, double a0, color tlc, color brc, double tlw, double brw) { raster<true_color> ras= as_raster<true_color> (pic); int w= ras->w, h= ras->h, ox= ras->ox, oy= ras->oy; raster<double> tl= tl_distances (ras); raster<double> br= br_distances (ras); raster<true_color> ret (w, h, ox, oy); true_color c1 (tlc); true_color c2 (brc); for (int y=0; y<h; y++) for (int x=0; x<w; x++) { double d1= tl->a[y*w+x]; double d2= br->a[y*w+x]; double a1= 1.0 / (1.0 + d1*d1/(tlw*tlw)); double a2= 1.0 / (1.0 + d2*d2/(brw*brw)); true_color c0= ras->a[y*w+x]; true_color cc (c0.r, c0.g, c0.b, a0); true_color mc= (a0 * cc + a1 * c1 + a2 * c2) / (a0 + a1 + a2); ret->a[y*w+x]= true_color (mc.r, mc.g, mc.b, c0.a * mc.a); } return raster_picture (ret); }
color mix (color c1, double a1, color c2, double a2, color c3, double a3, color c4, double a4) { return (color) mix (true_color (c1), a1, true_color (c2), a2, true_color (c3), a3, true_color (c4), a4); }
color mix (color c1, double a1, color c2, double a2) { return (color) mix (true_color (c1), a1, true_color (c2), a2); }
picture gaussian_pen_picture (double rx, double ry, double phi) { raster<double> ras= gaussian_pen<double> (rx, ry, phi); return raster_picture (apply_alpha (true_color (0, 0, 0, 1), ras)); }
picture compose (picture pic, color c, composition_mode mode) { raster<true_color> ras= as_raster<true_color> (pic); return raster_picture (compose (ras, true_color (c), mode)); }
void draw_on (picture& pic, color c, composition_mode mode) { raster<true_color> ras= as_raster<true_color> (pic); draw_on (ras, true_color (c), mode); }
picture motion_pen_picture (double dx, double dy) { raster<double> ras= motion_pen<double> (dx, dy); return raster_picture (apply_alpha (true_color (0, 0, 0, 1), ras)); }
picture rectangular_pen_picture (double rx, double ry, double phi) { raster<double> ras= rectangular_pen<double> (rx, ry, phi); return raster_picture (apply_alpha (true_color (0, 0, 0, 1), ras)); }