| |
| |
| #include "stdfx.h" |
| #include "tfxparam.h" |
| #include "trop.h" |
| |
| class GammaFx : public TStandardRasterFx |
| { |
| FX_PLUGIN_DECLARATION(GammaFx) |
| |
| TRasterFxPort m_input; |
| TDoubleParamP m_gamma; |
| |
| public: |
| GammaFx() |
| : m_gamma(1.0) |
| { |
| bindParam(this, "value", m_gamma); |
| addInputPort("Source", m_input); |
| |
| m_gamma->setValueRange(0.0, 200.0); |
| } |
| |
| ~GammaFx(){}; |
| |
| bool doGetBBox(double frame, TRectD &bBox, const TRenderSettings &info) |
| { |
| |
| if (m_input.isConnected()) |
| return m_input->doGetBBox(frame, bBox, info); |
| else { |
| bBox = TRectD(); |
| return false; |
| } |
| }; |
| |
| void doCompute(TTile &tile, double frame, const TRenderSettings &); |
| |
| bool canHandle(const TRenderSettings &info, double frame) { return true; } |
| }; |
| |
| |
| |
| void GammaFx::doCompute(TTile &tile, double frame, const TRenderSettings &ri) |
| { |
| if (!m_input.isConnected()) |
| return; |
| |
| m_input->compute(tile, frame, ri); |
| |
| double gamma = m_gamma->getValue(frame); |
| |
| if (gamma == 0.0) |
| gamma = 0.01; |
| TRop::gammaCorrect(tile.getRaster(), gamma); |
| } |
| |
| |
| |
| FX_PLUGIN_IDENTIFIER(GammaFx, "gammaFx") |
| |