From e20bc09052c64a22595c75f382e9c417436628eb Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Fri, 10 Feb 2012 00:03:56 +0000 Subject: [PATCH] colorspace.(cpp|h) cosmetics Originally committed to SVN as r6458. --- aegisub/src/colorspace.cpp | 100 +++---------------------------------- aegisub/src/colorspace.h | 27 ++++------ 2 files changed, 16 insertions(+), 111 deletions(-) diff --git a/aegisub/src/colorspace.cpp b/aegisub/src/colorspace.cpp index d15472257..65af1f77d 100644 --- a/aegisub/src/colorspace.cpp +++ b/aegisub/src/colorspace.cpp @@ -40,14 +40,7 @@ #include "utils.h" -/// @brief matrix from http://forum.doom9.org/showthread.php?p=684080#post684080 -/// @param Y -/// @param U -/// @param V -/// @param R -/// @param G -/// @param B -/// +// Matrix from http://forum.doom9.org/showthread.php?p=684080#post684080 void yuv_to_rgb(int Y, int U, int V, unsigned char *R, unsigned char *G, unsigned char *B) { U = U - 128; @@ -59,15 +52,7 @@ void yuv_to_rgb(int Y, int U, int V, unsigned char *R, unsigned char *G, unsigne -/// @brief making every value into 0..255 range though algorithm from http://130.113.54.154/~monger/hsl-rgb.html -/// @param H -/// @param S -/// @param L -/// @param R -/// @param G -/// @param B -/// @return -/// +// Algorithm from http://130.113.54.154/~monger/hsl-rgb.html void hsl_to_rgb(int H, int S, int L, unsigned char *R, unsigned char *G, unsigned char *B) { if (S == 0) { @@ -167,17 +152,8 @@ void hsl_to_rgb(int H, int S, int L, unsigned char *R, unsigned char *G, unsigne *B = clip_colorval((int)(b*255)); } - - -/// @brief the range for H is 0..255 instead of 0..359, so 60 degrees has been translated to 256/6 here formulas taken from wikipedia: http://en.wikipedia.org/wiki/HSV_color_space -/// @param H -/// @param S -/// @param V -/// @param R -/// @param G -/// @param B -/// @return -/// +// Formulas taken from wikipedia: http://en.wikipedia.org/wiki/HSV_color_space +// The range for H is 0..255 instead of 0..359, so 60 degrees has been translated to 256/6 here void hsv_to_rgb(int H, int S, int V, unsigned char *R, unsigned char *G, unsigned char *B) { *R = *G = *B = 0; @@ -279,16 +255,7 @@ void hsv_to_rgb(int H, int S, int V, unsigned char *R, unsigned char *G, unsigne *B = clip_colorval(b/256); } - - -/// @brief matrix from http://forum.doom9.org/showthread.php?p=684080#post684080 -/// @param R -/// @param G -/// @param B -/// @param Y -/// @param U -/// @param V -/// +// Matrix from http://forum.doom9.org/showthread.php?p=684080#post684080 void rgb_to_yuv(int R, int G, int B, unsigned char *Y, unsigned char *U, unsigned char *V) { *Y = clip_colorval(( int(0.299*65536) * R + int(0.587*65536) * G + int(0.114*65536) * B) / 65536); @@ -296,16 +263,7 @@ void rgb_to_yuv(int R, int G, int B, unsigned char *Y, unsigned char *U, unsigne *V = clip_colorval(( int(0.615*65536) * R - int(0.515*65536) * G - int(0.100*65536) * B) / 65536 + 128); } - - -/// @brief still keeping everything integer also from http://130.113.54.154/~monger/hsl-rgb.html -/// @param R -/// @param G -/// @param B -/// @param H -/// @param S -/// @param L -/// +/// Algorithm from http://130.113.54.154/~monger/hsl-rgb.html void rgb_to_hsl(int R, int G, int B, unsigned char *H, unsigned char *S, unsigned char *L) { float r = R/255.f, g = G/255.f, b = B/255.f; @@ -341,16 +299,7 @@ void rgb_to_hsl(int R, int G, int B, unsigned char *H, unsigned char *S, unsigne *L = clip_colorval(int(l*255)); } - - -/// @brief formulas from http://en.wikipedia.org/wiki/HSV_color_space -/// @param R -/// @param G -/// @param B -/// @param H -/// @param S -/// @param V -/// +/// Formulas from http://en.wikipedia.org/wiki/HSV_color_space void rgb_to_hsv(int R, int G, int B, unsigned char *H, unsigned char *S, unsigned char *V) { float r = R/255.f, g = G/255.f, b = B/255.f; @@ -384,16 +333,6 @@ void rgb_to_hsv(int R, int G, int B, unsigned char *H, unsigned char *S, unsigne *V = clip_colorval(int(v*255)); } - - -/// @brief DOCME -/// @param iH -/// @param iS -/// @param iV -/// @param oH -/// @param oS -/// @param oL -/// void hsv_to_hsl(int iH, int iS, int iV, unsigned char *oH, unsigned char *oS, unsigned char *oL) { int p = iV * (255 - iS); @@ -408,17 +347,6 @@ void hsv_to_hsl(int iH, int iS, int iV, unsigned char *oH, unsigned char *oS, un } } - - -/// @brief DOCME -/// @param iH -/// @param iS -/// @param iL -/// @param oH -/// @param oS -/// @param oV -/// @return -/// void hsl_to_hsv(int iH, int iS, int iL, unsigned char *oH, unsigned char *oS, unsigned char *oV) { *oH = iH; @@ -438,22 +366,11 @@ void hsl_to_hsv(int iH, int iS, int iL, unsigned char *oH, unsigned char *oS, un } } - - -/// @brief DOCME -/// @param color -/// @return -/// wxString color_to_html(wxColour color) { return wxString::Format("#%02X%02X%02X", color.Red(), color.Green(), color.Blue()); } - - -/// @brief DOCME -/// @param html -/// wxColour html_to_color(wxString html) { html.Trim(true); @@ -490,6 +407,3 @@ wxColour html_to_color(wxString html) return wxColour(*wxBLACK); } } - - - diff --git a/aegisub/src/colorspace.h b/aegisub/src/colorspace.h index 03547c965..a06e919ea 100644 --- a/aegisub/src/colorspace.h +++ b/aegisub/src/colorspace.h @@ -34,42 +34,33 @@ /// @ingroup utility /// - - - #ifndef AGI_PRE #include #include #endif - -/// @brief DOCME -/// @param val -/// inline unsigned int clip_colorval(int val) { - if (val < 0) return 0; - if (val > 255) return 255; - return val; + return std::max(0, std::min(val, 255)); } -// Convert an YUV color to RGB; all values are expected to be in range 0..255 +/// Convert an YUV color to RGB; all values are expected to be in range 0..255 void yuv_to_rgb(int Y, int U, int V, unsigned char *R, unsigned char *G, unsigned char *B); -// Convert a HSL color to RGB; all values are expected to be in range 0..255 +/// Convert a HSL color to RGB; all values are expected to be in range 0..255 void hsl_to_rgb(int H, int S, int L, unsigned char *R, unsigned char *G, unsigned char *B); -// Convert a HSV color to RGB; all values are expected to be in range 0..255 +/// Convert a HSV color to RGB; all values are expected to be in range 0..255 void hsv_to_rgb(int H, int S, int V, unsigned char *R, unsigned char *G, unsigned char *B); -// Convert an RGB color to YUV; all values are expected to be in range 0..255 +/// Convert an RGB color to YUV; all values are expected to be in range 0..255 void rgb_to_yuv(int R, int G, int B, unsigned char *Y, unsigned char *U, unsigned char *V); -// Convert an RGB color to HSL; all values are expected to be in range 0..255 +/// Convert an RGB color to HSL; all values are expected to be in range 0..255 void rgb_to_hsl(int R, int G, int B, unsigned char *H, unsigned char *S, unsigned char *L); -// Convert an RGB color to HSV; all values are expected to be in range 0..255 +/// Convert an RGB color to HSV; all values are expected to be in range 0..255 void rgb_to_hsv(int R, int G, int B, unsigned char *H, unsigned char *S, unsigned char *V); void hsv_to_hsl(int iH, int iS, int iV, unsigned char *oH, unsigned char *oS, unsigned char *oL); @@ -77,8 +68,8 @@ void hsv_to_hsl(int iH, int iS, int iV, unsigned char *oH, unsigned char *oS, un void hsl_to_hsv(int iH, int iS, int iL, unsigned char *oH, unsigned char *oS, unsigned char *oV); -// Convert a wxColour to a HTML hex string +/// Convert a wxColour to a HTML hex string wxString color_to_html(wxColour color); -// Convert a HTML hex string to a wxColour +/// Convert a HTML hex string to a wxColour wxColour html_to_color(wxString html);