Revise perspective transformation to remove hard-coded angular field of view and horizontal perspective axis of rotation. Add vertical bias parameter to retain ability to perform vertical perspective transformation independent of the horizontal perspective axis of rotation. Add field of view parameter as a tentative method for specifying angular field of view. The current implementation of perspective transformation applies horizontal perspective transformation in such a way that preserves the orientation of a horizontal line going through the center of the image. In common use cases, horizontal lines such as the horizon do not go through the center of the image. In such cases, the horizontal perspective axis of rotation should not be parallel to the image's y-axis. This commit makes the axis of rotation dependent on the vertical parameter. The two axes of rotation should be placed at the appropriate distance from the image in order to prevent stretched or compressed proportions. In the current implementation, the axes are at a fixed relative distance from the image. This commit adds the ability to specify the distance in the form of the diagonal angular field of view.
51 lines
1.6 KiB
C++
51 lines
1.6 KiB
C++
/*
|
|
* This file is part of RawTherapee.
|
|
*
|
|
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
|
|
*
|
|
* RawTherapee is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* RawTherapee is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with RawTherapee. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
#pragma once
|
|
|
|
#include <gtkmm.h>
|
|
|
|
#include "adjuster.h"
|
|
#include "toolpanel.h"
|
|
|
|
class PerspCorrection final :
|
|
public ToolParamBlock,
|
|
public AdjusterListener,
|
|
public FoldableToolPanel
|
|
{
|
|
|
|
protected:
|
|
Adjuster* horiz;
|
|
Adjuster* vert;
|
|
Adjuster* vBias;
|
|
Adjuster* fov;
|
|
|
|
public:
|
|
|
|
PerspCorrection ();
|
|
|
|
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr) override;
|
|
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr) override;
|
|
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr) override;
|
|
void setBatchMode (bool batchMode) override;
|
|
|
|
void adjusterChanged (Adjuster* a, double newval) override;
|
|
void setAdjusterBehavior (bool badd);
|
|
void trimValues (rtengine::procparams::ProcParams* pp) override;
|
|
};
|