fixed glitch in handling crop windows at the edges of the image when LCP distortion correction is enabled
This commit is contained in:
@@ -1145,15 +1145,33 @@ bool Crop::setCropSizes (int rcx, int rcy, int rcw, int rch, int skip, bool inte
|
||||
parent->ipf.transCoord (parent->fw, parent->fh, bx1, by1, bw, bh, orx, ory, orw, orh);
|
||||
|
||||
if (check_need_larger_crop_for_lcp_distortion(parent->fw, parent->fh, orx, ory, orw, orh, parent->params)) {
|
||||
double dW = double(parent->fw) * 0.15 / skip; // TODO - this is hardcoded ATM!
|
||||
double dH = double(parent->fh) * 0.15 / skip; // this is an estimate of the max
|
||||
// distortion relative to the image
|
||||
// size. BUT IS 15% REALLY ENOUGH?
|
||||
// In fact, is there a better way??
|
||||
orx = max(int(orx - dW/2.0), 0);
|
||||
ory = max(int(ory - dH/2.0), 0);
|
||||
orw = min(int(orw + dW), parent->fw - orx);
|
||||
orh = min(int(orh + dH), parent->fh - ory);
|
||||
// TODO - this is an estimate of the max distortion relative to the image size. ATM it is hardcoded to be 15%, which seems enough. If not, need to revise
|
||||
int dW = int(double(parent->fw) * 0.15 / (2 * skip));
|
||||
int dH = int(double(parent->fh) * 0.15 / (2 * skip));
|
||||
int x1 = orx - dW;
|
||||
int x2 = orx + orw + dW;
|
||||
int y1 = ory - dH;
|
||||
int y2 = ory + orh + dH;
|
||||
if (x1 < 0) {
|
||||
x2 += -x1;
|
||||
x1 = 0;
|
||||
}
|
||||
if (x2 > parent->fw) {
|
||||
x1 -= x2 - parent->fw;
|
||||
x2 = parent->fw;
|
||||
}
|
||||
if (y1 < 0) {
|
||||
y2 += -y1;
|
||||
y1 = 0;
|
||||
}
|
||||
if (y2 > parent->fh) {
|
||||
y1 -= y2 - parent->fh;
|
||||
y2 = parent->fh;
|
||||
}
|
||||
orx = max(x1, 0);
|
||||
ory = max(y1, 0);
|
||||
orw = min(x2 - x1, parent->fw - orx);
|
||||
orh = min(y2 - y1, parent->fh - ory);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user