Skip to content

Instantly share code, notes, and snippets.

@springmeyer
Created November 15, 2012 00:58
Show Gist options
  • Save springmeyer/4075949 to your computer and use it in GitHub Desktop.
Save springmeyer/4075949 to your computer and use it in GitHub Desktop.
rgb -> hsl and rgb -> hsv conversion with boost::gil
#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