static int create_color(int i, int scale) { int r = scale_color(i, 1, scale); int g = scale_color(i, 2, scale); int b = scale_color(i, 3, scale); int rgb = 16 + scale * scale * r + scale * g + b; /* In the case of white and black we need to use the ANSI colors */ if (r == g && g == b) { if (b == 0) rgb = 0; if (b == scale) rgb = 15; } return rgb; }
void Scene::create_colorscale() { const ColorScale &scale = colorScales[scaleMethod]; for (int i=0; i<MAPCLRS; i++) { float *rcol = colorData + 3*(BEGMAP + i); float relpos = float(i) / float(MAPCLRS -1); scale_color(scale.min, scale.mid, scale.max, scaleMid, relpos, scaleMin, rcol); } root.color_scale_changed(); }
static void breather_panels(struct render_args* args) { int i; double rate = args->effect->argument ? args->effect->argument : 1.0; double c = (sin((args->framenum / rate) * M_2_PI) / 2.0) + 0.5; for (i = 0; i < args->framelen; i += 3) { char* pixel = &args->framebuf[i]; union color color = args->effect->color_arg.colors[i / 3]; union color scaled = { .rgb = { .red = scale_color(color.rgb.red, c, 0), .green = scale_color(color.rgb.green, c, 0), .blue = scale_color(color.rgb.blue, c, 0), } }; pixel[0] = scaled.rgb.red; pixel[1] = scaled.rgb.green; pixel[2] = scaled.rgb.blue; } }
static void breather_treads(struct render_args* args) { int i; int num_pixels = args->framelen/3; union color color = args->effect->color_arg.color; double rate = args->effect->argument ? args->effect->argument : 1.0; double c = (sin((args->framenum / rate) * M_2_PI) / 2.0) + 0.5; union color scaled = { .rgb = { .red = scale_color(color.rgb.red, c, 1), .green = scale_color(color.rgb.green, c, 1), .blue = scale_color(color.rgb.blue, c, 1), } }; for (i = 0; i < num_pixels; i++) { char* pixel = &args->framebuf[i*3]; pixel[0] = 0x80 | scaled.rgb.green; pixel[1] = 0x80 | scaled.rgb.red; pixel[2] = 0x80 | scaled.rgb.blue; } }