bool RescaleInstance::ExecuteOn( View& view ) { AutoViewLock lock( view ); ImageVariant image = view.Image(); if ( image.IsComplexSample() ) return false; Console().EnableAbort(); StandardStatus status; image.SetStatusCallback( &status ); switch ( mode ) { default: case RescalingMode::RGBK: image->SelectNominalChannels(); image.Rescale(); break; case RescalingMode::RGBK_Individual: for ( int c = 0; c < image->NumberOfNominalChannels(); ++c ) { image->SelectChannel( c ); image.Rescale(); } break; case RescalingMode::CIEL: { ImageVariant L; image.GetLightness( L ); L.Rescale(); image.SetLightness( L ); } break; case RescalingMode::CIEY: { ImageVariant Y; image.GetLuminance( Y ); Y.Rescale(); image.SetLuminance( Y ); } break; } return true; }
bool LarsonSekaninaInstance::ExecuteOn( View& view ) { AutoViewLock lock( view ); ImageVariant image = view.Image(); if ( image.IsComplexSample() ) return false; StandardStatus status; image.SetStatusCallback( &status ); Console().EnableAbort(); ImageVariant sharpImg; sharpImg.CreateFloatImage( (image.BitsPerSample() > 32) ? image.BitsPerSample() : 32 ); sharpImg.AllocateImage( image->Width(), image->Height(), 1, ColorSpace::Gray ); if ( useLuminance && image->IsColor() ) { ImageVariant L; image.GetLightness( L ); Convolve( L, sharpImg, interpolation, radiusDiff, angleDiff, center, 0 ); ApplyFilter( L, sharpImg, amount, threshold, deringing, rangeLow, rangeHigh, false, 0, highPass ); image.SetLightness( L ); } else { for ( int c = 0, n = image->NumberOfNominalChannels(); c < n; ++c ) { image->SelectChannel( c ); if ( n > 1 ) Console().WriteLn( "<end><cbr>Processing channel #" + String( c ) ); Convolve( image, sharpImg, interpolation, radiusDiff, angleDiff, center, c ); ApplyFilter( image, sharpImg, amount, threshold, deringing, rangeLow, rangeHigh, disableExtension, c, highPass ); } } return true; }