about summary refs log tree commit diff
path: root/editor/pnmcrop.c
diff options
context:
space:
mode:
authorgiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2006-11-30 17:10:01 +0000
committergiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2006-11-30 17:10:01 +0000
commit97abc12b97b06f102356505f438f540fbbb3f858 (patch)
treed060cca7a962ce8ffae368d893ceb3cd01fe1720 /editor/pnmcrop.c
parent67b79bdf31266d27f161ff7164357e434cdf8dd1 (diff)
downloadnetpbm-mirror-97abc12b97b06f102356505f438f540fbbb3f858.tar.gz
netpbm-mirror-97abc12b97b06f102356505f438f540fbbb3f858.tar.xz
netpbm-mirror-97abc12b97b06f102356505f438f540fbbb3f858.zip
pnmcrop: multi-image input stream
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@158 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'editor/pnmcrop.c')
-rw-r--r--editor/pnmcrop.c84
1 files changed, 45 insertions, 39 deletions
diff --git a/editor/pnmcrop.c b/editor/pnmcrop.c
index 4ef778c3..87fd14b3 100644
--- a/editor/pnmcrop.c
+++ b/editor/pnmcrop.c
@@ -549,6 +549,7 @@ main(int argc, char *argv[]) {
         /* The program's regular input file.  Could be a seekable copy of it
            in a temporary file.
         */
+    bool eof;   /* no more images in input stream */
 
     xelval maxval;
     int format;
@@ -567,53 +568,58 @@ main(int argc, char *argv[]) {
 
     ifP = pm_openr_seekable(cmdline.inputFilespec);
 
-    pnm_readpnminit(ifP, &cols, &rows, &maxval, &format);
+    eof = FALSE;
+    while (!eof) {
+        pnm_readpnminit(ifP, &cols, &rows, &maxval, &format);
 
-    pm_tell2(ifP, &rasterpos, sizeof(rasterpos));
+        pm_tell2(ifP, &rasterpos, sizeof(rasterpos));
 
-    background = computeBackground(ifP, cols, rows, maxval, format,
-                                   cmdline.background, cmdline.verbose);
+        background = computeBackground(ifP, cols, rows, maxval, format,
+                                       cmdline.background, cmdline.verbose);
+
+        if (cmdline.borderfile) {
+            findBordersInFile(cmdline.borderfile,
+                              background, cmdline.verbose, &hasBorders,
+                              &oldLeftBorder, &oldRightBorder,
+                              &oldTopBorder,  &oldBottomBorder);
+        } else {
+            pm_seek2(ifP, &rasterpos, sizeof(rasterpos));
+
+            findBordersInImage(ifP, cols, rows, maxval, format, 
+                               background, cmdline.verbose, &hasBorders,
+                               &oldLeftBorder, &oldRightBorder,
+                               &oldTopBorder,  &oldBottomBorder);
+        }
+        if (!hasBorders)
+            pm_error("The image is entirely background; "
+                     "there is nothing to crop.");
+
+        determineNewBorders(cmdline, 
+                            oldLeftBorder, oldRightBorder,
+                            oldTopBorder,  oldBottomBorder,
+                            &newLeftBorder, &newRightBorder,
+                            &newTopBorder,  &newBottomBorder);
+
+        if (cmdline.verbose) 
+            reportCroppingParameters(oldLeftBorder, oldRightBorder,
+                                     oldTopBorder,  oldBottomBorder,
+                                     newLeftBorder, newRightBorder,
+                                     newTopBorder,  newBottomBorder);
 
-    if (cmdline.borderfile) {
-        findBordersInFile(cmdline.borderfile,
-                          background, cmdline.verbose, &hasBorders,
-                          &oldLeftBorder, &oldRightBorder,
-                          &oldTopBorder,  &oldBottomBorder);
-    } else {
         pm_seek2(ifP, &rasterpos, sizeof(rasterpos));
 
-        findBordersInImage(ifP, cols, rows, maxval, format, 
-                           background, cmdline.verbose, &hasBorders,
-                           &oldLeftBorder, &oldRightBorder,
-                           &oldTopBorder,  &oldBottomBorder);
+        writeCropped(ifP, cols, rows, maxval, format,
+                     oldLeftBorder, oldRightBorder,
+                     oldTopBorder,  oldBottomBorder,
+                     newLeftBorder, newRightBorder,
+                     newTopBorder,  newBottomBorder,
+                     background, stdout);
+
+        pnm_nextimage(ifP, &eof);
     }
-    if (!hasBorders)
-        pm_error("The image is entirely background; "
-                 "there is nothing to crop.");
-
-    determineNewBorders(cmdline, 
-                        oldLeftBorder, oldRightBorder,
-                        oldTopBorder,  oldBottomBorder,
-                        &newLeftBorder, &newRightBorder,
-                        &newTopBorder,  &newBottomBorder);
-
-    if (cmdline.verbose) 
-        reportCroppingParameters(oldLeftBorder, oldRightBorder,
-                                 oldTopBorder,  oldBottomBorder,
-                                 newLeftBorder, newRightBorder,
-                                 newTopBorder,  newBottomBorder);
-
-    pm_seek2(ifP, &rasterpos, sizeof(rasterpos));
-
-    writeCropped(ifP, cols, rows, maxval, format,
-                 oldLeftBorder, oldRightBorder,
-                 oldTopBorder,  oldBottomBorder,
-                 newLeftBorder, newRightBorder,
-                 newTopBorder,  newBottomBorder,
-                 background, stdout);
 
     pm_close(stdout);
     pm_close(ifP);
-    
+
     return 0;
 }