Created
November 15, 2012 00:58
-
-
Save springmeyer/4075949 to your computer and use it in GitHub Desktop.
rgb -> hsl and rgb -> hsv conversion with boost::gil
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <boost/gil/gil_all.hpp> | |
#include <boost/gil/extension/toolbox/hsv.hpp> | |
#include <boost/gil/extension/toolbox/hsl.hpp> | |
#include <iostream> | |
void pc(std::string name, unsigned r, unsigned g, unsigned b) { | |
std::clog << name << ": " << r << "," << g << "," << b << "\n"; | |
} | |
void rgb2hsv(unsigned sr, unsigned sg, unsigned sb, | |
float & h, float & s, float& v) { | |
using namespace boost; | |
using namespace gil; | |
using namespace hsv_color_space; | |
rgb8_pixel_t rgb_src(sr,sg,sb); | |
rgb8_pixel_t rgb_dst(0,0,0); | |
hsv32f_pixel_t hsv_src,hsv_dst; | |
color_convert(rgb_src, hsv_src); | |
color_convert(rgb_dst, hsv_dst); | |
h = get_color(hsv_src,hue_t()); | |
s = get_color(hsv_src,saturation_t()); | |
v = get_color(hsv_src,value_t()); | |
} | |
void hsv2rgb(float h, float s, float v, | |
unsigned & r, unsigned & g, unsigned & b) { | |
using namespace boost; | |
using namespace gil; | |
using namespace hsv_color_space; | |
hsv32f_pixel_t hsv_src(h,s,v); | |
rgb8_pixel_t rgb_dst; | |
color_convert(hsv_src, rgb_dst); | |
r = get_color(rgb_dst,red_t()); | |
g = get_color(rgb_dst,green_t()); | |
b = get_color(rgb_dst,blue_t()); | |
} | |
void rgb2hsl(unsigned sr, unsigned sg, unsigned sb, | |
float & h, float & s, float& l) { | |
using namespace boost; | |
using namespace gil; | |
using namespace hsl_color_space; | |
//using namespace hsl_color_space; | |
rgb8_pixel_t rgb_src(sr,sg,sb); | |
hsl32f_pixel_t hsl_src; | |
color_convert(rgb_src, hsl_src); | |
h = get_color(hsl_src,hue_t()); | |
s = get_color(hsl_src,saturation_t()); | |
l = get_color(hsl_src,lightness_t()); | |
} | |
void hsl2rgb(float h, float s, float l, | |
unsigned & r, unsigned & g, unsigned & b) { | |
using namespace boost; | |
using namespace gil; | |
using namespace hsl_color_space; | |
hsl32f_pixel_t hsl_src(h,s,l); | |
rgb8_pixel_t rgb_dst; | |
color_convert(hsl_src, rgb_dst); | |
r = get_color(rgb_dst,red_t()); | |
g = get_color(rgb_dst,green_t()); | |
b = get_color(rgb_dst,blue_t()); | |
} | |
int main() { | |
float h,s,v; | |
unsigned r,g,b; | |
r = 127; | |
g = 0; | |
b = 255; | |
rgb2hsv(r,g,b,h,s,v); | |
pc("rgb",r,g,b); | |
pc("hsv", h,s,v); | |
hsv2rgb(h,s,v,r,g,b); | |
pc("hsv->rgb",r,g,b); | |
r = 127; | |
g = 0; | |
b = 255; | |
rgb2hsl(r,g,b,h,s,v); | |
pc("rgb",r,g,b); | |
pc("hsv", h,s,v); | |
hsl2rgb(h,s,v,r,g,b); | |
pc("hsl->rgb",r,g,b); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment