#!/bin/csh

#######################################################################################################################################
#                                                                                                                                     #
#         R E C A D R A G E   D E S   A N C I E N S   " H A R D - C O P I E S "   T E K T R O N I X  :                                #
#                                                                                                                                     #
#                                                                                                                                     #
#         Utilisation :                                                                                                               #
#                                                                                                                                     #
#    $xci/RecadrageHardCopy.02$vv$Z     <imaA> <imaR> [<formatR> [<Mode> [<Scroll> [<MargeS> [<Seuil> [<FacX [<FacY> [<Trans>]]]]]]]  #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xci/RecadrageHardCopy.02$vv$Z' :                                                                                #
#                                                                                                                                     #
#                     Jean-Francois COLONNA (LACTAMME, 20220207103820).                                                               #
#                                                                                                                                     #
#######################################################################################################################################

set       imageA=$1
set       imageR=$2
set       FormatR=($3)
set       Mode=$4
set       Scroll=$5
                                        # Parametre introduit le 20220208121619 pour 'v $xiHi/OLDIES_BUT_GOLDIES_NB.recadree.0001'.   #
set       MargeS=$6
                                        # Parametre introduit le 20220208121619 pour 'v $xiHi/OLDIES_BUT_GOLDIES_NB.recadree.0013'.   #
set       Seuil=$7
set       FactX=$8
set       FactY=$9
set       Trans="$10"
                                        # Parametre introduit le 20240318172427 pour 'v $xiHi/OLDIES_BUT_GOLDIES_NB.0101$JPEG'...     #

setArgum  FormatR                       $formatR_Pdu

setArgum  Mode                          2

setArgum  Scroll                        $EXIST

setArgum  MargeS                        0

setArgum  Seuil                         252

setArgum  FactX                         10

setArgum  FactY                         10

setArgum  Trans                         "$K_VIDE"

if        (-e $imageA) then
          S

          FilSTmpB  ImAgEt

          $CONVERT -depth $NBitsOctet JPEG:$imageA $Trans JPEG:$ImAgEt.0$JPEG

#2024031817:set  DiMeNsIoNs=`$CONVERT -verbose -depth $NBitsOctet -flip JPEG:$imageA RGBA:$ImAgEt.1$RVB |& $GRE "$imageA" | $HEA -1`  #
set  DiMeNsIoNs=`$CONVERT -verbose -depth $NBitsOctet -flip JPEG:$ImAgEt.0$JPEG RGBA:$ImAgEt.1$RVB |& $GRE "$ImAgEt.0$JPEG" | $HEA -1`

          set       DiMeNsIoNs=`echo "$DiMeNsIoNs" | $R "$K_TAB" "$K_BLANC"`
          set       DiMeNsIoNs=`echo "$DiMeNsIoNs" | $SE -e 's/^.* \([0-9][0-9]*\)x\([0-9][0-9]*\)[ +].*$/\1 \2/'`
                                        # C'est 'v $xiMo/creation$Z le.format.a.encore.change' qui a fourni les quelques instructions #
                                        # qui precedent...                                                                            #

          SwapB     $ImAgEt.1$RVB

          @         DiMeNsIoNsX = $DiMeNsIoNs[1] - 0
          @         DiMeNsIoNsY = $DiMeNsIoNs[2] - 0

          gFITn     FIT1 $DiMeNsIoNsX $DiMeNsIoNsY

          FIT1

          unset     DiMeNsIoNsX
          unset     DiMeNsIoNsY
          unset     DiMeNsIoNs

          $xci/RVB_load$X                                                                                                               \
                              A=$ImAgEt.1$RVB                                                                                           \
                              RVB=VRAI                                                                                                  \
                              R=$ImAgEt.2                                                                                               \
                                                                                          $formatI

          if        ($Scroll == $EXIST) then
                    $xci/luminance.01$X                                                                                                 \
                                        A=$ImAgEt.2                                                                                     \
                                                                                          $formatI                                |     \
                    $xci/seuil$X                                                                                                        \
                                        seuil=$Seuil                                                                                    \
                                        inferieur=$NOIR superieur=$BLANC                                                                \
                                                                                          $formatI                                |     \
                    $xci/dilate.01$X                                                                                                    \
                                        dilatation=VRAI                                                                                 \
                                        R=$ImAgEt$LUMIN                                                                                 \
                                                                                          $formatI

                    set       Xcentre=`calculINS $Xmin+($dimX/2)`
                    set       Ycentre=`calculINS $Ymin+($dimY/2)`

                    set       PoInT=`$xci/niveau$X A=$ImAgEt$LUMIN x=$Xmin y=$Ycentre Prme=VRAI`

                    if        ($PoInT != $BLANC) then
                              EROR      "La luminance de '$imageA' n'est pas correcte -1-."
                    else
                    endif

                    set       PoInT=`$xci/niveau$X A=$ImAgEt$LUMIN x=$Xcentre y=$Ymin Prme=VRAI`

                    if        ($PoInT != $BLANC) then
                              EROR      "La luminance de '$imageA' n'est pas correcte -2-."
                    else
                    endif

                    $xci/S_point$X                                                                                                      \
                                        A=$ImAgEt$LUMIN                                                                                 \
                                        niveau=$BLANC                                                                                   \
                                        x=$Xmin y=$Ycentre                                                                              \
                                                                                          $formatI                                |     \
                    $xci/S_point$X                                                                                                      \
                                        niveau=$BLANC                                                                                   \
                                        x=$Xcentre y=$Ymin                                                                              \
                                        R=$ImAgEt$LUMIN                                                                                 \
                                                                                          $formatI
                                        # On fait ensuite l'hypothese que l'image '$ImAgEt$LUMIN' a l'apparence suivante :            #
                                        #                                                                                             #
                                        #                                                                                             #
                                        #                    ---------------------------------------                                  #
                                        #                   |***                                    |                                 #
                                        #                   |***                                    |                                 #
                                        #                   |***                                    |                                 #
                                        #                   |***                                    |                                 #
                                        #                   |***                                    |                                 #
                                        #                   |***                NOIR                |                                 #
                                        #                   |***                                    |                                 #
                                        #                   |A**                                    |                                 #
                                        #                   |***                                    |                                 #
                                        #                   |***                                    |                                 #
                                        #                   |***                                    |                                 #
                                        #                   |***************************************|                                 #
                                        #                   |*******************BLANC***************|                                 #
                                        #                   |***************************************|                                 #
                                        #                   |*******************B*******************|                                 #
                                        #                    ---------------------------------------                                  #
                                        #                                                                                             #
                                        #                                                                                             #
                                        # Ci-apres, on va donc decaler a gauche jusqu'a ce que le point :                             #
                                        #                                                                                             #
                                        #                   A={$Xmin,$Ycentre}                                                        #
                                        #                                                                                             #
                                        # qui initialement est '$BLANC' devienne '$NOIR' :                                            #
                                        #                                                                                             #
                                        #                                                                                             #
                                        #                    ---------------------------------------                                  #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                   NOIR                |                                 #
                                        #                   |                                       |                                 #
                                        #                   |A                                      |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |************************************   |                                 #
                                        #                   |*******************BLANC************   |                                 #
                                        #                   |************************************   |                                 #
                                        #                   |*******************B****************   |                                 #
                                        #                    ---------------------------------------                                  #
                                        #                                                                                             #
                                        #                                                                                             #
                                        # Ensuite, on fera un decalage vers le bas jusqu'a ce que le point :                          #
                                        #                                                                                             #
                                        #                   B={$Xcentre,$Ymin}                                                        #
                                        #                                                                                             #
                                        # qui initialement est '$BLANC' devienne '$NOIR' :                                            #
                                        #                                                                                             #
                                        #                                                                                             #
                                        #                    ---------------------------------------                                  #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                   NOIR                |                                 #
                                        #                   |                                       |                                 #
                                        #                   |A                                      |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                                       |                                 #
                                        #                   |                   B                   |                                 #
                                        #                    ---------------------------------------                                  #
                                        #                                                                                             #

                    set       PaS_TrAnSlAtIoN_X=`$xcg/DIVZ.01$X a=$FactX b=$dimX signe="$K_VIDE"`
                    set       PaS_TrAnSlAtIoN_Y=`$xcg/DIVZ.01$X a=$FactY b=$dimY signe="$K_VIDE"`
                                        # Les parametres '$Fact?' fait qu'on se translate par "paquets" de '$FactX' colonnes          #
                                        # et '$FactY' lignes...                                                                       #

                    set       TrAnSlAtIoN_X=$PaS_TrAnSlAtIoN_X
                    set       TrAnSlAtIoN_Y=0

                    set       NoIr=`echo $NOIR | $SE -e 's/^0*\(0\)$/\1/'`
                                        # Et ce a cause du fait que '$NOIR' vaut '000' et non pas '0', ce qui donc contrarierait      #
                                        # les deux tests de '$PoInT' ci-apres...                                                      #

                    set       ItErEr=$EXIST

                    while     ($ItErEr == $EXIST)
                              $xci/scroll$X                                                                                             \
                                                  A=$ImAgEt$LUMIN                                                                       \
                                                  toreX=FAUX trX=-$TrAnSlAtIoN_X                                                        \
                                                  toreY=FAUX trY=-$TrAnSlAtIoN_Y                                                        \
                                                  R=$ImAgEt$LUMIN.1                                                                     \
                                                                                                              $formatI
                                        # Decalage a gauche...                                                                        #

                              set       PoInT=`$xci/niveau$X A=$ImAgEt$LUMIN.1 x=$Xmin y=$Ycentre Prme=VRAI`

                              if        ($PoInT == $NoIr) then
                                        set       ItErEr=$NEXIST
                                        # On s'arrete lorsque la bande verticale (de gauche et contenant le point 'A') a              #
                                        # completement disparu...                                                                     #
                              else
                                        set       TrAnSlAtIoN_X=`$xcg/ADD2.01$X a=$TrAnSlAtIoN_X b=$PaS_TrAnSlAtIoN_X signe="$K_VIDE"`
                              endif
                    end

                    set       TrAnSlAtIoN_Y=$PaS_TrAnSlAtIoN_Y

                    set       ItErEr=$EXIST

                    while     ($ItErEr == $EXIST)
                              $xci/scroll$X                                                                                             \
                                                  A=$ImAgEt$LUMIN                                                                       \
                                                  toreX=FAUX trX=-$TrAnSlAtIoN_X                                                        \
                                                  toreY=FAUX trY=-$TrAnSlAtIoN_Y                                                        \
                                                  R=$ImAgEt$LUMIN.1                                                                     \
                                                                                                              $formatI
                                        # Decalage vers le bas...                                                                     #

                              set       PoInT=`$xci/niveau$X A=$ImAgEt$LUMIN.1 x=$Xcentre y=$Ymin Prme=VRAI`

                              if        ($PoInT == $NoIr) then
                                        set       ItErEr=$NEXIST
                                        # On s'arrete lorsque la bande horizontale (inferieure et contenant le point 'B') a           #
                                        # completement disparu...                                                                     #
                              else
                                        set       TrAnSlAtIoN_Y=`$xcg/ADD2.01$X a=$TrAnSlAtIoN_Y b=$PaS_TrAnSlAtIoN_Y signe="$K_VIDE"`
                              endif
                    end

                    set       TrAnSlAtIoN_X=`$xcg/ADD2.01$X a=$TrAnSlAtIoN_X b=$MargeS signe="$K_VIDE"`
                    set       TrAnSlAtIoN_Y=`$xcg/ADD2.01$X a=$TrAnSlAtIoN_Y b=$MargeS signe="$K_VIDE"`
                                        # La marge de securite "manuelle" a ete introduite le 20220208121619...                       #

                    if        (    (`$xcg/IFGE.01$X a=$TrAnSlAtIoN_X b=1` == $EXIST)                                                    \
                              ||   (`$xcg/IFGE.01$X a=$TrAnSlAtIoN_Y b=1` == $EXIST)                                                    \
                               ) then
                              EROR      "L'image '$imageA' ne peut etre translatee."

#20220208133200____:                              set       TrAnSlAtIoN_X=0                                                           #
#20220208133200____:                              set       TrAnSlAtIoN_Y=0                                                           #

                              set       TrAnSlAtIoN_X=$PaS_TrAnSlAtIoN_X
                              set       TrAnSlAtIoN_Y=$PaS_TrAnSlAtIoN_Y
                                        # C'est le cas, par exemple, de 'v $xiHi/OLDIES_BUT_GOLDIES_NB.recadree.0001'...              #
                    else
                    endif

                    set       TrAnSlAtIoN_Xs2=`$xcg/MOIT.01$X a=$TrAnSlAtIoN_X signe="$K_VIDE"`
                    set       TrAnSlAtIoN_Ys2=`$xcg/MOIT.01$X a=$TrAnSlAtIoN_Y signe="$K_VIDE"`

                    execRVB   $xci/scroll$X                                                                                             \
                                                  A=$ImAgEt.2%s                                                                         \
                                                  toreX=FAUX trX=-$TrAnSlAtIoN_X                                                        \
                                                  toreY=FAUX trY=-$TrAnSlAtIoN_Y                                                        \
                                                  R=$ImAgEt.3%s                                                                         \
                                                                                                    $formatI
                    if        ($NEXIST) then
                                        # Test introduit le 20220210074819 afin de remplacer le decalage qui suit par un reformatage. #
                              execRVB   $xci/scroll$X                                                                                   \
                                                            A=$ImAgEt.3%s                                                               \
                                                            toreX=FAUX trX=+$TrAnSlAtIoN_Xs2                                            \
                                                            toreY=FAUX trY=+$TrAnSlAtIoN_Ys2                                            \
                                                            R=$ImAgEt.4%s                                                               \
                                                                                                              $formatI
                                        # La translation {-$TrAnSlAtIoN_X,-$TrAnSlAtIoN_Y} elimine les zones verticale de gauche      #
                                        # et horizontale du bas. La translation {+$TrAnSlAtIoN_Xs2,+$TrAnSlAtIoN_Ys2} centre l'image  #
                                        # Resultat...                                                                                 #
                    else
                              set       DiMeNsIoNs_X=`calculINS (1-$TrAnSlAtIoN_X-$MargeS)*$dimX`
                              set       DiMeNsIoNs_Y=`calculINS (1-$TrAnSlAtIoN_Y-$MargeS)*$dimY`

                              gFITn     FIT2 $DiMeNsIoNs_X $DiMeNsIoNs_Y

                              execRVB   $xci/format.01$X                                                                                \
                                                            A=$ImAgEt.3%s                                                               \
                                                                                                                        $formatI        \
                                                            mode=3                                                                      \
                                                            R=$ImAgEt.5%s                                                               \
                                                                                                                        $formatR_FIT2

                              FIT2

                              execRVB   $xci/format.01$X                                                                                \
                                                            A=$ImAgEt.5%s                                                               \
                                                                                                                        $formatI        \
                                                            mode=2                                                                      \
                                                            R=$ImAgEt.4%s                                                               \
                                                                                                    $formatR_FIT1

                              FIT1
                    endif
          else
                    execRVB   $xci/neutre$X                                                                                             \
                                                  A=$ImAgEt.2%s                                                                         \
                                                  R=$ImAgEt.4%s                                                                         \
                                                                                                    $formatI
                                        # Possibilite "neutre" introduite le 20220208121619...                                        #
          endif

          execRVB   $xci/format.01$X                                                                                                    \
                                        A=$ImAgEt.4%s                                                                                   \
                                                                                                    $formatI                            \
                                        mode=$Mode                                                                                      \
                                        R=$imageR%s                                                                                     \
                                                                                                              $FormatR
                                        # On notera que :                                                                             #
                                        #                                                                                             #
                                        #                   FIT1      formatI="Xmin=0 Xmax=2337 Ymin=0 Ymax=1653"                     #
                                        #                                       2338/1654 = 1.4135                                    #
                                        #                                                                                             #
                                        #                   Pdu       formatI="Xmin=0 Xmax=1559 Ymin=0 Ymax=1149"                     #
                                        #                                       1560/1150 = 1.3565                                    #
                                        #                                                                                             #
                                        #                   Pal       formatI="Xmin=0 Xmax=779 Ymin=0 Ymax=574"                       #
                                        #                                       780/575   = 1.3565                                    #
                                        #                                                                                             #
                                        # Les deux formats 'FIT1' et 'Pdu' (ainsi que 'Pal' et d'autres "homothetiques"...) ont des   #
                                        # proportions assez proches...                                                                #

          FilSTmpE  ImAgEt
else
          EROR      "L'image '$imageA' n'existe pas."
endif



Copyright © Jean-François COLONNA, 2022-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.