opencl hsl 和 rgba 转换

来源:互联网 发布:mac右键没反应 编辑:程序博客网 时间:2024/05/14 13:19
bool EPSEQ(float x, float y){float eps = 0.000001f;return fabs((x)-(y)) <= (eps);}float hue2rgb(float p,float q,float t){if(t < 0.0f) t += 1.0f;if(t > 1.0f) t -= 1.0f;if(t < 1.0f/6.0f) return p + (q - p) * 6.0f * t;if(t < 1.0f/2.0f) return q;if(t < 2.0f/3.0f) return p + (q - p) * (2.0f/3.0f - t) * 6.0f;return p;}//http://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversionfloat4 adjustHSL(float4 yuv_in,float H_,float S_,float L_){float R = 0.0f, G = 0.0f, B = 0.0f;float Y = 0.0f, U = 0.0f, V = 0.0f;float H = 0.0f, S = 0.0f, L = 0.0f;float input_Y = yuv_in.x;float input_U = yuv_in.y;float input_V = yuv_in.z;R = input_Y + 1.140*input_V;G = input_Y - 0.394*input_U - 0.581*input_V;B = input_Y + 2.032*input_U;// //rgbToHsl// R /= 255.0f;// G /= 255.0f;// B /= 255.0f;// // float max = (R > G && R > B) ? R : (G > B) ? G : B;// float min = (R < G && R < B) ? R : (G < B) ? G : B;// // L = (max + min) / 2.0f;// // if(max == min){// H = S = 0.0f; // achromatic// }else{// float d = max - min;// S = L > 0.5 ? d / (2.0f - max - min) : d / (max + min);// // if(R > G && R > B){// H = (G - B) / d + (G < B ? 6.0f : 0.0f); // }// else if(G > B){// H = (B - R) / d + 2.0f; // }// else{// H = (R - G) / d + 4.0f; // }// H /= 6.0f;// }// //hslToRgb// if(S == 0.0){// R = G = B = L; // achromatic// }else{// float q = L < 0.5f ? L * (1 + S) : L + S - L * S;// float p = 2.0f * L - q;// R = hue2rgb(p, q, H + 1.0f/3.0f) * 255.0f;// G = hue2rgb(p, q, H)    * 255.0f;// B = hue2rgb(p, q, H - 1.0f/3.0f) * 255.0f;// }Y =  0.299*R + 0.587*G + 0.114*B;U = -0.147*R - 0.289*G + 0.436*B;V =  0.615*R - 0.515*G - 0.100*B;return (float4)(Y,U,V,0.0f);}

0 0
原创粉丝点击