bool Color::isDark() const { float r, g, b, a, h, s, v; getRGBA(r, g, b, a); convertRGBToHSV(r, g, b, h, s, v); return a > 0.5 && v < 0.5; }
Color Color::dark() const { float r, g, b, a, h, s, v; getRGBA(r, g, b, a); convertRGBToHSV(r, g, b, h, s, v); v = max(0.0f, min(v - 0.33f, 1.0f)); convertHSVToRGB(h, s, v, r, g, b); return Color((int)(r * 255), (int)(g * 255), (int)(b * 255), (int)(a * 255)); }
/*! * pixcmapConvertRGBToHSV() * * Input: colormap * Return: 0 if OK; 1 on error * * Notes: * - in-place transform * - See convertRGBToHSV() for def'n of HSV space. * - replaces: r --> h, g --> s, b --> v */ l_int32 pixcmapConvertRGBToHSV(PIXCMAP *cmap) { l_int32 i, ncolors, rval, gval, bval, hval, sval, vval; PROCNAME("pixcmapConvertRGBToHSV"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); pixcmapResetColor(cmap, i, hval, sval, vval); } return 0; }