diff options
Diffstat (limited to 'noao/imred/quadred/src/quad/qguser.x')
-rw-r--r-- | noao/imred/quadred/src/quad/qguser.x | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/noao/imred/quadred/src/quad/qguser.x b/noao/imred/quadred/src/quad/qguser.x new file mode 100644 index 00000000..5d4bf349 --- /dev/null +++ b/noao/imred/quadred/src/quad/qguser.x @@ -0,0 +1,126 @@ +include "quadgeom.h" + +# QGUSER -- modify open quadgeom structure for user specified trim and +# overscan. + +procedure qguser (qg, xtrim1, xtrim2, ytrim1, ytrim2, xskip1, xskip2) + +pointer qg # Pointer to open quadgeom structure. +int xtrim1 # Number of pixels to trim at right. +int xtrim2 # Number of pixels to trim at left. +int ytrim1 # Number of pixels to trim at bottom. +int ytrim2 # Number of pixels to trim at top. +int xskip1 # Number of pixels to skip at start of overscan in X. +int xskip2 # Number of pixels to skip at end of overscan in X. + +int amp, x, y +int bx1, bx2, by1, by2 + +begin + + # Modify overscan margins + Do amp = 1, QG_NAMPS (qg) { + + switch (QG_AMPTYPE(qg, amp)) { + case AMP11, AMP21: # Left hand side + if (IS_INDEFI (xskip1)) { + bx1 = QG_BX1(qg, amp) + } else { + bx1 = QG_DX2(qg, amp) + xskip1 + 1 + } + + if (IS_INDEFI (xskip2)) { + bx2 = QG_BX2(qg, amp) + } else { + bx2 = QG_AX2(qg, amp) - QG_AX1(qg, amp) - xskip2 + 1 + } + + case AMP12, AMP22: # Right hand side + if (IS_INDEFI (xskip2)) { + bx1 = QG_BX1(qg, amp) + } else { + bx1 = 1 + xskip2 + } + if (IS_INDEFI (xskip1)) { + bx2 = QG_BX2(qg, amp) + } else { + bx2 = QG_DX1(qg, amp) - xskip1 - 1 + } + + } + by1 = QG_BY1(qg, amp) + by2 = QG_BY2(qg, amp) + + if (bx1 > bx2) { + bx1 = 0 + bx2 = 0 + by1 = 0 + by2 = 0 + } + + QG_BX1(qg, amp) = bx1 + QG_BX2(qg, amp) = bx2 + QG_BY1(qg, amp) = by1 + QG_BY2(qg, amp) = by2 + + } + + # Modify trim margins + + # Set left hand edge + if (! IS_INDEFI(xtrim1)) { + do y = 1, QG_NAMPSY(qg) { + do x = 1, QG_NAMPSX(qg) { + + amp = QG_AMP(qg, x, y) + if (QG_PHANTOM(qg, amp) == NO) { + QG_TX1(qg, amp) = QG_DX1(qg, amp) + xtrim1 + break + } + } + } + } + + # Set right hand edge + if (! IS_INDEFI(xtrim2)) { + do y = 1, QG_NAMPSY(qg) { + do x = QG_NAMPSX(qg), 1, -1 { + + amp = QG_AMP(qg, x, y) + if (QG_PHANTOM(qg, amp) == NO) { + QG_TX2(qg, amp) = QG_DX2(qg, amp) - xtrim2 + break + } + } + } + } + + + # Set lower edge + if (! IS_INDEFI(ytrim1)) { + do x = 1, QG_NAMPSX(qg) { + do y = 1, QG_NAMPSY(qg) { + + amp = QG_AMP(qg, x, y) + if (QG_PHANTOM(qg, amp) == NO) { + QG_TY1(qg, amp) = QG_DY1(qg, amp) + ytrim1 + break + } + } + } + } + + # Set upper edge + if (! IS_INDEFI(ytrim2)) { + do x = 1, QG_NAMPSX(qg) { + do y = QG_NAMPSY(qg), 1, -1 { + + amp = QG_AMP(qg, x, y) + if (QG_PHANTOM(qg, amp) == NO) { + QG_TY2(qg, amp) = QG_DY2(qg, amp) - ytrim2 + break + } + } + } + } +end |