LLColor4U lggBeamMaps::beamColorFromData(lggBeamsColors data) { F32 r, g, b; LLColor4 output; LLColor4U toReturn; F32 timeinc = timer.getElapsedTimeF32()*0.3f*((data.rotateSpeed+.01f)) * (360/(data.endHue-data.startHue)); S32 diference = llround(data.endHue - data.startHue); if(diference == 360 || diference == 720) { //full rainbow //liner one hslToRgb(fmod(timeinc,1.0f), 1.0f, 0.5f, r, g, b); }else { F32 variance = ((data.endHue/360.0f)-(data.startHue/360.0f))/2.0f; hslToRgb((data.startHue/360.0f) + variance + (sinf(timeinc)*(variance)), 1.0f, 0.5f, r, g, b); } output.set(r, g, b); toReturn.setVecScaleClamp(output); return toReturn; }
void LLFloaterColorPicker::createUI () { // create RGB type area (not really RGB but it's got R,G & B in it.,.. LLPointer<LLImageRaw> raw = new LLImageRaw ( mRGBViewerImageWidth, mRGBViewerImageHeight, mComponents ); U8* bits = raw->getData(); S32 linesize = mRGBViewerImageWidth * mComponents; for ( S32 y = 0; y < mRGBViewerImageHeight; ++y ) { for ( S32 x = 0; x < linesize; x += mComponents ) { F32 rVal, gVal, bVal; hslToRgb ( (F32)x / (F32) ( linesize - 1 ), (F32)y / (F32) ( mRGBViewerImageHeight - 1 ), 0.5f, rVal, gVal, bVal ); * ( bits + x + y * linesize + 0 ) = ( U8 )( rVal * 255.0f ); * ( bits + x + y * linesize + 1 ) = ( U8 )( gVal * 255.0f ); * ( bits + x + y * linesize + 2 ) = ( U8 )( bVal * 255.0f ); } } mRGBImage = LLViewerTextureManager::getLocalTexture( (LLImageRaw*)raw, FALSE ); gGL.getTexUnit(0)->bind(mRGBImage); mRGBImage->setAddressMode(LLTexUnit::TAM_CLAMP); // create palette for ( S32 each = 0; each < numPaletteColumns * numPaletteRows; ++each ) { mPalette.push_back(new LLColor4(LLUIColorTable::instance().getColor(llformat("ColorPaletteEntry%02d", each + 1)))); } }
////////////////////////////////////////////////////////////////////////////// // mutator for current HSL value void LLFloaterColorPicker::setCurHsl ( F32 curHIn, F32 curSIn, F32 curLIn ) { // save current HSL curH = curHIn; curS = curSIn; curL = curLIn; // update corresponding RGB values and hslToRgb ( curH, curS, curL, curR, curG, curB ); }
void LLFloaterColorPicker:: createUI () { // build the majority of the gui using the factory builder LLUICtrlFactory::getInstance()->buildFloater ( this, "floater_color_picker.xml" ); setVisible ( FALSE ); // create RGB type area (not really RGB but it's got R,G & B in it.,.. LLPointer<LLImageRaw> raw = new LLImageRaw ( mRGBViewerImageWidth, mRGBViewerImageHeight, mComponents ); U8* bits = raw->getData(); S32 linesize = mRGBViewerImageWidth * mComponents; for ( S32 y = 0; y < mRGBViewerImageHeight; ++y ) { for ( S32 x = 0; x < linesize; x += mComponents ) { F32 rVal, gVal, bVal; hslToRgb ( (F32)x / (F32) ( linesize - 1 ), (F32)y / (F32) ( mRGBViewerImageHeight - 1 ), 0.5f, rVal, gVal, bVal ); * ( bits + x + y * linesize + 0 ) = ( U8 )( rVal * 255.0f ); * ( bits + x + y * linesize + 1 ) = ( U8 )( gVal * 255.0f ); * ( bits + x + y * linesize + 2 ) = ( U8 )( bVal * 255.0f ); } } mRGBImage = new LLImageGL ( (LLImageRaw*)raw, FALSE ); gGL.getTexUnit(0)->bind(mRGBImage); mRGBImage->setAddressMode(LLTexUnit::TAM_CLAMP); // create palette for ( S32 each = 0; each < numPaletteColumns * numPaletteRows; ++each ) { std::ostringstream codec; codec << "ColorPaletteEntry" << std::setfill ( '0' ) << std::setw ( 2 ) << each + 1; // argh! const std::string s ( codec.str () ); mPalette.push_back ( new LLColor4 ( gSavedSettings.getColor4 ( s ) ) ); } }
void main(void) { // http://stackoverflow.com/questions/944713/help-with-pixel-shader-effect-for-brightness-and-contrast vec4 pixelColor = texture2D(image, fragmentTextureCoordinate.xy); pixelColor.rgb /= pixelColor.a; // compensate for channels that are completely void - this allows a fully exposed pixel // to always be white, regardless of starting value. .001 is the minimum resolution that // enables this. if( exposure > 0.) pixelColor.rgb += vec3(.001); // Apply Exposure pixelColor.rgb = clamp(pixelColor.rgb * pow(2., exposure), 0., 1.); vec3 hsl = rgbToHsl(pixelColor.rgb); // Apply hue shift hsl.x = mod(hsl.x + hueShift, 1.); // // Apply saturation hsl.y *= saturation; pixelColor.rgb = hslToRgb(hsl); // Apply contrast. pixelColor.rgb = ((pixelColor.rgb - 0.5f) * max(contrast, 0.)) + 0.5f; // Apply brightness. pixelColor.rgb += brightness; pixelColor.rgb = clamp(pixelColor.rgb, 0., 1.); // // Apply gamma. pixelColor.r = pow(pixelColor.r, gamma); pixelColor.g = pow(pixelColor.g, gamma); pixelColor.b = pow(pixelColor.b, gamma); // Return final pixel color. pixelColor.rgb *= pixelColor.a; gl_FragColor = pixelColor; }
void LLFloaterColorPicker::draw() { LLRect swatch_rect; mSwatch->localRectToOtherView(mSwatch->getLocalRect(), &swatch_rect, this); // draw context cone connecting color picker with color swatch in parent floater LLRect local_rect = getLocalRect(); if (gFocusMgr.childHasKeyboardFocus(this) && mSwatch->isInVisibleChain() && mContextConeOpacity > 0.001f) { gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); LLGLEnable(GL_CULL_FACE); gGL.begin(LLRender::QUADS); { gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity); gGL.vertex2i(swatch_rect.mLeft, swatch_rect.mTop); gGL.vertex2i(swatch_rect.mRight, swatch_rect.mTop); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity); gGL.vertex2i(local_rect.mRight, local_rect.mTop); gGL.vertex2i(local_rect.mLeft, local_rect.mTop); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity); gGL.vertex2i(local_rect.mLeft, local_rect.mTop); gGL.vertex2i(local_rect.mLeft, local_rect.mBottom); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity); gGL.vertex2i(swatch_rect.mLeft, swatch_rect.mBottom); gGL.vertex2i(swatch_rect.mLeft, swatch_rect.mTop); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity); gGL.vertex2i(local_rect.mRight, local_rect.mBottom); gGL.vertex2i(local_rect.mRight, local_rect.mTop); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity); gGL.vertex2i(swatch_rect.mRight, swatch_rect.mTop); gGL.vertex2i(swatch_rect.mRight, swatch_rect.mBottom); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity); gGL.vertex2i(local_rect.mLeft, local_rect.mBottom); gGL.vertex2i(local_rect.mRight, local_rect.mBottom); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity); gGL.vertex2i(swatch_rect.mRight, swatch_rect.mBottom); gGL.vertex2i(swatch_rect.mLeft, swatch_rect.mBottom); } gGL.end(); } if (gFocusMgr.childHasMouseCapture(getDragHandle())) { mContextConeOpacity = lerp(mContextConeOpacity, gSavedSettings.getF32("PickerContextOpacity"), LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); } else { mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); } mPipetteBtn->setToggleState(LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance()); mApplyImmediateCheck->setEnabled(mActive && mCanApplyImmediately); mSelectBtn->setEnabled(mActive); // base floater stuff LLFloater::draw (); // draw image for RGB area (not really RGB but you'll see what I mean... gl_draw_image ( mRGBViewerImageLeft, mRGBViewerImageTop - mRGBViewerImageHeight, mRGBImage, LLColor4::white ); // update 'cursor' into RGB Section S32 xPos = ( S32 ) ( ( F32 )mRGBViewerImageWidth * getCurH () ) - 8; S32 yPos = ( S32 ) ( ( F32 )mRGBViewerImageHeight * getCurS () ) - 8; gl_line_2d ( mRGBViewerImageLeft + xPos, mRGBViewerImageTop - mRGBViewerImageHeight + yPos + 8, mRGBViewerImageLeft + xPos + 16, mRGBViewerImageTop - mRGBViewerImageHeight + yPos + 8, LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ) ); gl_line_2d ( mRGBViewerImageLeft + xPos + 8, mRGBViewerImageTop - mRGBViewerImageHeight + yPos, mRGBViewerImageLeft + xPos + 8, mRGBViewerImageTop - mRGBViewerImageHeight + yPos + 16, LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ) ); // create rgb area outline gl_rect_2d ( mRGBViewerImageLeft, mRGBViewerImageTop - mRGBViewerImageHeight, mRGBViewerImageLeft + mRGBViewerImageWidth + 1, mRGBViewerImageTop, LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ), FALSE ); // draw luminance slider for ( S32 y = 0; y < mLumRegionHeight; ++y ) { F32 rValSlider, gValSlider, bValSlider; hslToRgb ( getCurH (), getCurS (), ( F32 )y / ( F32 )mLumRegionHeight, rValSlider, gValSlider, bValSlider ); gl_rect_2d( mLumRegionLeft, mLumRegionTop - mLumRegionHeight + y, mLumRegionLeft + mLumRegionWidth, mLumRegionTop - mLumRegionHeight + y - 1, LLColor4 ( rValSlider, gValSlider, bValSlider, 1.0f ) ); } // draw luninance marker S32 startX = mLumRegionLeft + mLumRegionWidth; S32 startY = mLumRegionTop - mLumRegionHeight + ( S32 ) ( mLumRegionHeight * getCurL () ); gl_triangle_2d ( startX, startY, startX + mLumMarkerSize, startY - mLumMarkerSize, startX + mLumMarkerSize, startY + mLumMarkerSize, LLColor4 ( 0.75f, 0.75f, 0.75f, 1.0f ), TRUE ); // draw luminance slider outline gl_rect_2d ( mLumRegionLeft, mLumRegionTop - mLumRegionHeight, mLumRegionLeft + mLumRegionWidth + 1, mLumRegionTop, LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ), FALSE ); // draw selected color swatch gl_rect_2d ( mSwatchRegionLeft, mSwatchRegionTop - mSwatchRegionHeight, mSwatchRegionLeft + mSwatchRegionWidth, mSwatchRegionTop, LLColor4 ( getCurR (), getCurG (), getCurB (), 1.0f ), TRUE ); // draw selected color swatch outline gl_rect_2d ( mSwatchRegionLeft, mSwatchRegionTop - mSwatchRegionHeight, mSwatchRegionLeft + mSwatchRegionWidth + 1, mSwatchRegionTop, LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ), FALSE ); // color palette code is a little more involved so break it out into its' own method drawPalette (); }
void ImageView::colorize() { int y, x; unsigned char hr, hg, hb; int r, g, b; QRgb *line; unsigned char h, s, l; static unsigned char contrastTransform[256]; static unsigned char brightTransform[256]; if (displayImage.format() == QImage::Format_Indexed8) { displayImage = displayImage.convertToFormat(QImage::Format_RGB32); } int i; float contrast = ((float)GData::contrastVal / 100.0); float brightness = ((float)GData::brightVal / 100.0); for(i = 0; i < 256; ++i) { if (i < (int)(128.0f + 128.0f * tan(contrast)) && i > (int)(128.0f - 128.0f * tan(contrast))) contrastTransform[i] = (i - 128) / tan(contrast) + 128; else if (i >= (int)(128.0f + 128.0f * tan(contrast))) contrastTransform[i] = 255; else contrastTransform[i] = 0; } for (i = 0; i < 256; ++i) { brightTransform[i] = MIN(255,(int)((255.0 * pow(i / 255.0, 1.0 / brightness)) + 0.5)); } for(y = 0; y < displayImage.height(); ++y) { line = (QRgb *)displayImage.scanLine(y); for(x = 0; x < displayImage.width(); ++x) { r = qRed(line[x]); g = qGreen(line[x]); b = qBlue(line[x]); r = bound0To255((r * (GData::redVal + 100)) / 100); g = bound0To255((g * (GData::greenVal + 100)) / 100); b = bound0To255((b * (GData::blueVal + 100)) / 100); r = bound0To255(contrastTransform[r]); g = bound0To255(contrastTransform[g]); b = bound0To255(contrastTransform[b]); r = bound0To255(brightTransform[r]); g = bound0To255(brightTransform[g]); b = bound0To255(brightTransform[b]); rgbToHsl(r, g, b, &h, &s, &l); if (GData::colorizeEnabled) h = GData::hueVal; else h += GData::hueVal; s = bound0To255(((s * GData::saturationVal) / 100)); l = bound0To255(((l * GData::lightnessVal) / 100)); hslToRgb(h, s, l, &hr, &hg, &hb); r = GData::hueRedChannel? hr : qRed(line[x]); g = GData::hueGreenChannel? hg : qGreen(line[x]); b = GData::hueBlueChannel? hb: qBlue(line[x]); line[x] = qRgb(r, g, b); } } }
void qtcShade(const Options *opts, const color *ca, color *cb, double k) #endif { if(qtcEqual(k, 1.0)) { #ifdef __cplusplus *cb=ca; #else cb->red = ca->red; cb->green = ca->green; cb->blue = ca->blue; #endif } else switch(opts->shading) { case SHADING_SIMPLE: { #ifdef __cplusplus int v=(int)(255.0*(k-1.0)); cb->setRgb(qtcLimit(ca.red()+v), qtcLimit(ca.green()+v), qtcLimit(ca.blue()+v)); #else double v=65535.0*(k-1.0); cb->red = qtcLimit(ca->red+v); cb->green = qtcLimit(ca->green+v); cb->blue = qtcLimit(ca->blue+v); #endif break; } case SHADING_HSL: { #ifdef __cplusplus double r(ca.red()/255.0), g(ca.green()/255.0), b(ca.blue()/255.0); #else double r=ca->red/65535.0, g=ca->green/65535.0, b=ca->blue/65535.0; #endif double h, s, l; rgbToHsl(r, g, b, &h, &s, &l); l=normalize(l*k); s=normalize(s*k); hslToRgb(h, s, l, &r, &g, &b); #ifdef __cplusplus cb->setRgb(qtcLimit(r*255.0), qtcLimit(g*255.0), qtcLimit(b*255.0)); #else cb->red=qtcLimit(r*65535.0); cb->green=qtcLimit(g*65535.0); cb->blue=qtcLimit(b*65535.0); #endif break; } case SHADING_HSV: { #ifdef __cplusplus double r(ca.red()/255.0), g(ca.green()/255.0), b(ca.blue()/255.0); #else double r=ca->red/65535.0, g=ca->green/65535.0, b=ca->blue/65535.0; #endif double h, s, v; qtcRgbToHsv(r, g, b, &h, &s, &v); v*=k; if (v > 1.0) { s -= v - 1.0; if (s < 0) s = 0; v = 1.0; } qtcHsvToRgb(&r, &g, &b, h, s, v); #ifdef __cplusplus cb->setRgb(qtcLimit(r*255.0), qtcLimit(g*255.0), qtcLimit(b*255.0)); #else cb->red=qtcLimit(r*65535.0); cb->green=qtcLimit(g*65535.0); cb->blue=qtcLimit(b*65535.0); #endif break; } case SHADING_HCY: { #define HCY_FACTOR 0.15 #if defined QT_VERSION && (QT_VERSION >= 0x040000) && defined QTC_QT4_ENABLE_KDE if(k>1.0) *cb=KColorUtils::lighten(ca, (k*(1+HCY_FACTOR))-1.0, 1.0); else *cb=KColorUtils::darken(ca, 1.0-(k*(1-HCY_FACTOR)), 1.0); #elif defined __cplusplus if(k>1.0) *cb=ColorUtils_lighten(&ca, (k*(1+HCY_FACTOR))-1.0, 1.0); else *cb=ColorUtils_darken(&ca, 1.0-(k*(1-HCY_FACTOR)), 1.0); #else if(k>1.0) *cb=ColorUtils_lighten(ca, (k*(1+HCY_FACTOR))-1.0, 1.0); else *cb=ColorUtils_darken(ca, 1.0-(k*(1-HCY_FACTOR)), 1.0); #endif } } #if defined __cplusplus && defined QT_VERSION && (QT_VERSION >= 0x040000) cb->setAlpha(ca.alpha()); #endif #ifndef __cplusplus cb->pixel = ca->pixel; #endif }