/* Published by b-l-a-c-k-o-p.com
Copyright (c) 2007-2012
http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode
*/
SAMPLE: QameraRainbow.qtzThis kernel takes a mask image, extracts the chromaticity from the mask, and applies the color to the source image without affecting the luma (brightness). You may want to front-load the input image with a contrast bump and/or desaturate the mask image slightly. Basically, this allows you to "steal" the color from an image without taking the brightness.
kernel vec4 msBlackTintMapping(sampler image, sampler mask)
{
const vec3 rgb_y = vec3(0.257, 0.504, 0.098);
const vec3 rgb_u = vec3(-0.148, -0.291, 0.439);
const vec3 rgb_v = vec3(0.439, -0.368, -0.071);
const vec3 yuv_r = vec3(1.0000, 0.0000, 1.4022 );
const vec3 yuv_g = vec3( 1.0000, -0.3457, -0.7145);
const vec3 yuv_b = vec3(1.0000, 1.7710, 0.0000);
vec4 pixel = sample(image, samplerCoord(image));
vec3 pel = pixel;
vec3 maxel = sample(mask, samplerCoord(mask));
vec3 tint_yuv;
tint_yuv.x = dot(maxel,rgb_y);
tint_yuv.y = dot(maxel,rgb_u);
tint_yuv.z = dot(maxel,rgb_v);
vec3 pixel_yuv;
pixel_yuv.x = dot(pel,rgb_y);
pixel_yuv.y = dot(pel,rgb_u);
pixel_yuv.z = dot(pel,rgb_v);
pixel_yuv.y = tint_yuv.y;
pixel_yuv.z = tint_yuv.z;
pel.r = dot(pixel_yuv,yuv_r);
pel.g = dot(pixel_yuv,yuv_g);
pel.b = dot(pixel_yuv,yuv_b);
return vec4(pel.r,pel.g,pel.b,pixel.a);
}