about summary refs log tree commit diff
path: root/editor
diff options
context:
space:
mode:
authorgiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2023-08-18 19:08:02 +0000
committergiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2023-08-18 19:08:02 +0000
commit0ab64534f3b47b42a67db15f5e47a118034e8e2e (patch)
tree0cbd0d8dbfbea31bc73c5abcfc8f25276bc8cc5d /editor
parentd6a74432bb099479d4ffe11f76ba84755b341ca3 (diff)
downloadnetpbm-mirror-0ab64534f3b47b42a67db15f5e47a118034e8e2e.tar.gz
netpbm-mirror-0ab64534f3b47b42a67db15f5e47a118034e8e2e.tar.xz
netpbm-mirror-0ab64534f3b47b42a67db15f5e47a118034e8e2e.zip
cleanup
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@4596 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'editor')
-rwxr-xr-xeditor/ppmfade433
1 files changed, 255 insertions, 178 deletions
diff --git a/editor/ppmfade b/editor/ppmfade
index 7896eb87..d96553d2 100755
--- a/editor/ppmfade
+++ b/editor/ppmfade
@@ -43,6 +43,14 @@ use strict;
 
 use File::Temp;
 
+#
+#  Define a couple linear ramps.
+#
+# We don't use element 0 of these arrays.
+my @spline10 = (0, 0, 0.11, 0.22, 0.33, 0.44, 0.55, 0.66, 0.77, 0.88, 1.0);
+my @spline20 = (0, 0, 0.05, 0.11, 0.16, 0.21, 0.26, 0.32, 0.37, 0.42, 0.47,
+                0.53, 0.58, 0.63, 0.69, 0.74, 0.79, 0.84, 0.89, 0.95, 1.0);
+
 sub doVersionHack($) {
     my ($argvR) = @_;
 
@@ -151,6 +159,252 @@ sub imageDimensions($$) {
 
 
 
+sub spreadOne($) {
+    my ($frameNum) = @_;
+
+    if ($frameNum <= 10) {
+        my $n = $spline20[$frameNum] * 100;
+        system("ppmspread $n $tmpdir/first.ppm >$tmpdir/this.ppm");
+    } elsif ($frameNum <= 20) {
+        my $n;
+        $n = $spline20[$frameNum] * 100;
+        system("ppmspread $n $tmpdir/first.ppm >$tmpdir/junk1a.ppm");
+        $n = (1-$spline20[$frameNum-10]) * 100;
+        system("ppmspread $n $tmpdir/last.ppm >$tmpdir/junk2a.ppm");
+        $n = $spline10[$frameNum-10];
+        system("ppmmix $n $tmpdir/junk1a.ppm $tmpdir/junk2a.ppm " .
+               ">$tmpdir/this.ppm");
+    } else {
+        my $n = (1-$spline20[$frameNum-10])*100;
+        system("ppmspread $n $tmpdir/last.ppm >$tmpdir/this.ppm");
+    }
+}
+
+
+
+sub shiftOne($) {
+    my ($frameNum) = @_;
+
+    if ($frameNum <= 10) {
+        my $n = $spline20[$frameNum] * 100;
+        system("ppmshift $n $tmpdir/first.ppm >$tmpdir/this.ppm");
+    } elsif ($frameNum <= 20) {
+        my $n;
+        $n = $spline20[$frameNum] * 100;
+        system("ppmshift $n $tmpdir/first.ppm >$tmpdir/junk1a.ppm");
+        $n = (1-$spline20[$frameNum-10])*100;
+        system("ppmshift $n last.ppm >junk2a.ppm");
+        $n = $spline10[$frameNum-10];
+        system("ppmmix $n junk1a.ppm junk2a.ppm >this.ppm");
+    } else {
+        my $n = (1-$spline20[$frameNum-10]) * 100;
+        system("ppmshift $n last.ppm >this.ppm");
+    }
+}
+
+
+
+sub reliefOne($) {
+    my ($frameNum) = @_;
+
+    if ($frameNum == 1) {
+        system("ppmrelief first.ppm >junk1r.ppm");
+    }
+    if ($frameNum <= 10) {
+        my $n = $spline10[$frameNum];
+        system("ppmmix $n first.ppm junk1r.ppm >this.ppm");
+    } elsif ($frameNum <= 20) {
+        my $n = $spline10[$frameNum-10];
+        system("ppmmix $n junk1r.ppm junk2r.ppm >this.ppm");
+    } else {
+        my $n = $spline10[$frameNum-20];
+        system("ppmmix $n junk2r.ppm last.ppm >this.ppm");
+    }
+    if ($frameNum == 10) {
+        system("ppmrelief last.ppm >junk2r.ppm");
+    }
+}
+
+
+
+sub oilOne($) {
+    my ($frameNum) = @_;
+
+    if ($frameNum == 1) {
+        system("ppmtopgm first.ppm | pgmoil >junko.ppm");
+        system("rgb3toppm junko.ppm junko.ppm junko.ppm " .
+               ">junk1o.ppm");
+    }
+    if ($frameNum <= 10) {
+        my $n = $spline10[$frameNum];
+        system("ppmmix $n first.ppm junk1o.ppm >this.ppm");
+    } elsif ($frameNum <= 20) {
+        my $n = $spline10[$frameNum-10];
+        system("ppmmix $n junk1o.ppm junk2o.ppm >this.ppm");
+    } else {
+        my $n = $spline10[$frameNum-20];
+        system("ppmmix $n junk2o.ppm last.ppm >this.ppm");
+    }
+    if ($frameNum == 10) {
+        system("ppmtopgm last.ppm | pgmoil >junko.ppm");
+        system("rgb3toppm junko.ppm junko.ppm junko.ppm " .
+               ">junk2o.ppm");
+    }
+}
+
+
+
+sub edgeOne($) {
+    my ($frameNum) = @_;
+
+    if ($frameNum == 1) {
+        system("ppmtopgm first.ppm | pgmedge >junko.ppm");
+        system("rgb3toppm junko.ppm junko.ppm junko.ppm " .
+               ">junk1o.ppm");
+    }
+    if ($frameNum <= 10) {
+        my $n = $spline10[$frameNum];
+        system("ppmmix $n first.ppm junk1o.ppm >this.ppm");
+    } elsif ($frameNum <= 20) {
+        my $n = $spline10[$frameNum-10];
+        system("ppmmix $n junk1o.ppm junk2o.ppm >this.ppm");
+    } else {
+        my $n = $spline10[$frameNum-20];
+        system("ppmmix $n junk2o.ppm last.ppm >this.ppm");
+    }
+    if ($frameNum == 10) {
+        system("ppmtopgm last.ppm | pgmedge >junko.ppm");
+        system("rgb3toppm junko.ppm junko.ppm junko.ppm " .
+               ">junk2o.ppm");
+    }
+}
+
+
+
+sub bentleyOne($) {
+    my ($frameNum) = @_;
+
+    if ($frameNum == 1) {
+        system("ppmtopgm first.ppm | pgmbentley >junko.ppm");
+        system("rgb3toppm junko.ppm junko.ppm junko.ppm " .
+               ">junk1o.ppm");
+    }
+    if ($frameNum <= 10) {
+        my $n = $spline10[$frameNum];
+        system("ppmmix $n first.ppm junk1o.ppm >this.ppm");
+    } elsif ($frameNum <= 20) {
+        my $n = $spline10[$frameNum-10];
+        system("ppmmix $n junk1o.ppm junk2o.ppm >this.ppm");
+    } else {
+        my $n = $spline10[$frameNum-20];
+        system("ppmmix $n $tmpdir/junk2o.ppm $tmpdir/last.ppm " .
+               ">$tmpdir/this.ppm");
+    }
+    if ($frameNum == 10) {
+        system("ppmtopgm $tmpdir/last.ppm | pgmbentley " .
+               ">$tmpdir/junko.ppm");
+        system("rgb3toppm $tmpdir/junko.ppm $tmpdir/junko.ppm " .
+               "$tmpdir/junko.ppm " .
+               ">$tmpdir/junk2o.ppm");
+    }
+}
+
+
+
+sub blockOne($$$) {
+    my ($frameNum, $width, $height) = @_;
+
+    if ($frameNum <= 10) {
+        my $n = 1 - 1.9*$spline20[$frameNum];
+        system("pamscale $n $tmpdir/first.ppm | " .
+               "pamscale -width $width -height $height " .
+               ">$tmpdir/this.ppm");
+        if ($frameNum == 10) {
+            system("cp", "$tmpdir/this.ppm", "$tmpdir/junk1a.ppm");
+            system("pamscale $n $tmpdir/last.ppm | " .
+                   "pamscale -width $width -height $height " .
+                   ">$tmpdir/junk2a.ppm");
+        }
+    } elsif ($frameNum <= 20) {
+        my $n = $spline10[$frameNum-10];
+        system("ppmmix $n $tmpdir/junk1a.ppm $tmpdir/junk2a.ppm " .
+               ">$tmpdir/this.ppm");
+    } else {
+        my $n = 1 - 1.9*$spline20[31-$frameNum];
+        system("pamscale $n $tmpdir/last.ppm | " .
+               "pamscale -width $width -height $height " .
+               ">$tmpdir/this.ppm");
+    }
+}
+
+
+
+sub mixOne($$) {
+    my ($frameNum, $nFrame) = @_;
+
+    my $fadeFactor = sqrt(1/($nFrame - $frameNum + 1));
+
+    system("ppmmix $fadeFactor $tmpdir/first.ppm $tmpdir/last.ppm " .
+           ">$tmpdir/this.ppm");
+}
+
+
+
+sub fade($$$$$) {
+    my ($nFrame, $mode, $width, $height, $baseNm) = @_;
+#-----------------------------------------------------------------------------
+#  Do the fade starting, from image "first.ppm" in the temporary direct
+#  $tmpdir and ending up at "last.ppm", creating $nFrame frames, including
+#  the first and last.
+#
+#  Make the outputs $width by $height.
+#
+#  Name the result files $baseNm.NNNN.ppm.
+#-----------------------------------------------------------------------------
+
+    # Here's what our temporary files are:
+    #   first.ppm: The original (fade-from) image
+    #   last.ppm: The target (fade-from) image
+    #   this.ppm: The frame of the fade for the current iteration of the
+    #             the for loop.
+    #   junk1a.ppm: If the fade involves a ppmmix sequence from one
+    #               intermediate image to another, this is the first frame
+    #               of that sequence.
+    #   junk2a.ppm: This is the last frame of the above-mentioned
+    #               ppmmix sequence
+
+    my $frameNum;    # Frame number
+    for ($frameNum = 1; $frameNum <= $nFrame; ++$frameNum) {
+
+        print("Creating Frame $frameNum of $nFrame...\n");
+
+        if ($mode eq 'SPREAD') {
+            spreadOne($frameNum);
+        } elsif ($mode eq 'SHIFT') {
+            shiftOne($frameNum);
+        } elsif ($mode eq 'RELIEF') {
+            reliefOne($frameNum);
+        } elsif ($mode eq 'OIL') {
+            oilOne($frameNum);
+        } elsif ($mode eq 'EDGE') {
+            edgeOne($frameNum);
+        } elsif ($mode eq 'BENTLEY') {
+            bentleyOne($frameNum);
+        } elsif ($mode eq 'BLOCK') {
+            blockOne($frameNum, $width, $height);
+        } elsif ($mode eq 'MIX') {
+            mixOne($frameNum, $nFrame);
+        } else {
+            print("INTERNAL ERROR: impossible mode value '$mode'\n");
+        }
+
+        my $outFileNm = sprintf("%s.%04d.ppm", $baseNm, $frameNum);
+        system("cp", "$tmpdir/this.ppm", $outFileNm);
+    }
+}
+
+
+
 #-----------------------------------------------------------------------------
 #  MAINLINE
 #-----------------------------------------------------------------------------
@@ -173,16 +427,6 @@ if (defined($lastFileNm) && !-e($lastFileNm)) {
     exit 20;
 }
 
-#
-#  Define a couple linear ramps.
-#
-# We don't use element 0 of these arrays.
-my @spline10 = (0, 0, 0.11, 0.22, 0.33, 0.44, 0.55, 0.66, 0.77, 0.88, 1.0);
-my @spline20 = (0, 0, 0.05, 0.11, 0.16, 0.21, 0.26, 0.32, 0.37, 0.42, 0.47,
-                0.53, 0.58, 0.63, 0.69, 0.74, 0.79, 0.84, 0.89, 0.95, 1.0);
-
-
-
 my ($width, $height) = imageDimensions($firstFileNm, $lastFileNm);
 
     # width and height of our frames in pixels
@@ -206,173 +450,6 @@ if (!defined($lastFileNm)) {
 
 print("Fading from $fromDesc to $toDesc\n");
 
-#
-#  Perform the fade.
-#
-
-# Here's what our temporary files are:
-#   first.ppm: The original (fade-from) image
-#   last.ppm: The target (fade-from) image
-#   this.ppm: The frame of the fade for the current iteration of the
-#             the for loop.
-#   junk1a.ppm: If the fade involves a ppmmix sequence from one intermediate
-#               image to another, this is the first frame of that
-#               sequence.
-#   junk2a.ppm: This is the last frame of the above-mentioned ppmmix sequence
-
-my $i;    # Frame number
-for ($i = 1; $i <= $nFrame; ++$i) {
-
-    print("Creating Frame $i of $nFrame...\n");
-
-    if ($mode eq 'SPREAD') {
-        if ($i <= 10) {
-            my $n = $spline20[$i] * 100;
-            system("ppmspread $n $tmpdir/first.ppm >$tmpdir/this.ppm");
-        } elsif ($i <= 20) {
-            my $n;
-            $n = $spline20[$i] * 100;
-            system("ppmspread $n $tmpdir/first.ppm >$tmpdir/junk1a.ppm");
-            $n = (1-$spline20[$i-10]) * 100;
-            system("ppmspread $n $tmpdir/last.ppm >$tmpdir/junk2a.ppm");
-            $n = $spline10[$i-10];
-            system("ppmmix $n $tmpdir/junk1a.ppm $tmpdir/junk2a.ppm " .
-                   ">$tmpdir/this.ppm");
-        } else {
-            my $n = (1-$spline20[$i-10])*100;
-            system("ppmspread $n $tmpdir/last.ppm >$tmpdir/this.ppm");
-        }
-    } elsif ($mode eq 'SHIFT') {
-        if ($i <= 10) {
-            my $n = $spline20[$i] * 100;
-            system("ppmshift $n $tmpdir/first.ppm >$tmpdir/this.ppm");
-        } elsif ($i <= 20) {
-            my $n;
-            $n = $spline20[$i] * 100;
-            system("ppmshift $n $tmpdir/first.ppm >$tmpdir/junk1a.ppm");
-            $n = (1-$spline20[$i-10])*100;
-            system("ppmshift $n last.ppm >junk2a.ppm");
-            $n = $spline10[$i-10];
-            system("ppmmix $n junk1a.ppm junk2a.ppm >this.ppm");
-        } else {
-            my $n = (1-$spline20[$i-10]) * 100;
-            system("ppmshift $n last.ppm >this.ppm");
-        }
-    } elsif ($mode eq 'RELIEF') {
-        if ($i == 1) {
-            system("ppmrelief first.ppm >junk1r.ppm");
-        }
-        if ($i <= 10) {
-            my $n = $spline10[$i];
-            system("ppmmix $n first.ppm junk1r.ppm >this.ppm");
-        } elsif ($i <= 20) {
-            my $n = $spline10[$i-10];
-            system("ppmmix $n junk1r.ppm junk2r.ppm >this.ppm");
-        } else {
-            my $n = $spline10[$i-20];
-            system("ppmmix $n junk2r.ppm last.ppm >this.ppm");
-        }
-        if ($i == 10) {
-            system("ppmrelief last.ppm >junk2r.ppm");
-        }
-    } elsif ($mode eq 'OIL') {
-        if ($i == 1) {
-            system("ppmtopgm first.ppm | pgmoil >junko.ppm");
-            system("rgb3toppm junko.ppm junko.ppm junko.ppm " .
-                   ">junk1o.ppm");
-        }
-        if ($i <= 10) {
-            my $n = $spline10[$i];
-            system("ppmmix $n first.ppm junk1o.ppm >this.ppm");
-        } elsif ($i <= 20) {
-            my $n = $spline10[$i-10];
-            system("ppmmix $n junk1o.ppm junk2o.ppm >this.ppm");
-        } else {
-            my $n = $spline10[$i-20];
-            system("ppmmix $n junk2o.ppm last.ppm >this.ppm");
-        }
-        if ($i == 10) {
-            system("ppmtopgm last.ppm | pgmoil >junko.ppm");
-            system("rgb3toppm junko.ppm junko.ppm junko.ppm " .
-                   ">junk2o.ppm");
-        }
-    } elsif ($mode eq 'EDGE') {
-        if ($i == 1) {
-            system("ppmtopgm first.ppm | pgmedge >junko.ppm");
-            system("rgb3toppm junko.ppm junko.ppm junko.ppm " .
-                   ">junk1o.ppm");
-        }
-        if ($i <= 10) {
-            my $n = $spline10[$i];
-            system("ppmmix $n first.ppm junk1o.ppm >this.ppm");
-        } elsif ($i <= 20) {
-            my $n = $spline10[$i-10];
-            system("ppmmix $n junk1o.ppm junk2o.ppm >this.ppm");
-        } else {
-            my $n = $spline10[$i-20];
-            system("ppmmix $n junk2o.ppm last.ppm >this.ppm");
-        }
-        if ($i == 10) {
-            system("ppmtopgm last.ppm | pgmedge >junko.ppm");
-            system("rgb3toppm junko.ppm junko.ppm junko.ppm " .
-                   ">junk2o.ppm");
-        }
-    } elsif ($mode eq 'BENTLEY') {
-        if ($i == 1) {
-            system("ppmtopgm first.ppm | pgmbentley >junko.ppm");
-            system("rgb3toppm junko.ppm junko.ppm junko.ppm " .
-                   ">junk1o.ppm");
-        }
-        if ($i <= 10) {
-            my $n = $spline10[$i];
-            system("ppmmix $n first.ppm junk1o.ppm >this.ppm");
-        } elsif ($i <= 20) {
-            my $n = $spline10[$i-10];
-            system("ppmmix $n junk1o.ppm junk2o.ppm >this.ppm");
-        } else {
-            my $n = $spline10[$i-20];
-            system("ppmmix $n $tmpdir/junk2o.ppm $tmpdir/last.ppm " .
-                   ">$tmpdir/this.ppm");
-        }
-        if ($i == 10) {
-               system("ppmtopgm $tmpdir/last.ppm | pgmbentley " .
-                      ">$tmpdir/junko.ppm");
-            system("rgb3toppm $tmpdir/junko.ppm $tmpdir/junko.ppm " .
-                   "$tmpdir/junko.ppm " .
-                   ">$tmpdir/junk2o.ppm");
-        }
-    } elsif ($mode eq 'BLOCK') {
-        if ($i <= 10) {
-            my $n = 1 - 1.9*$spline20[$i];
-            system("pamscale $n $tmpdir/first.ppm | " .
-                   "pamscale -width $width -height $height " .
-                   ">$tmpdir/this.ppm");
-            if ($i == 10) {
-                system("cp", "$tmpdir/this.ppm", "$tmpdir/junk1a.ppm");
-                system("pamscale $n $tmpdir/last.ppm | " .
-                       "pamscale -width $width -height $height " .
-                       ">$tmpdir/junk2a.ppm");
-            }
-        } elsif ($i <= 20) {
-            my $n = $spline10[$i-10];
-            system("ppmmix $n $tmpdir/junk1a.ppm $tmpdir/junk2a.ppm " .
-                   ">$tmpdir/this.ppm");
-        } else {
-            my $n = 1 - 1.9*$spline20[31-$i];
-            system("pamscale $n $tmpdir/last.ppm | " .
-                   "pamscale -width $width -height $height " .
-                   ">$tmpdir/this.ppm");
-        }
-    } elsif ($mode eq 'MIX') {
-        my $fadeFactor = sqrt(1/($nFrame-$i+1));
-        system("ppmmix $fadeFactor $tmpdir/first.ppm $tmpdir/last.ppm " .
-               ">$tmpdir/this.ppm");
-    } else {
-        print("INTERNAL ERROR: impossible mode value '$mode'\n");
-    }
-
-    my $outFileNm = sprintf("%s.%04d.ppm", $baseNm, $i);
-    system("cp", "$tmpdir/this.ppm", $outFileNm);
-}
+fade($nFrame, $mode, $width, $height, $baseNm);
 
 exit(0);