about summary refs log tree commit diff
diff options
context:
space:
mode:
authorgiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2024-03-16 16:48:22 +0000
committergiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2024-03-16 16:48:22 +0000
commit5076ffea9a12ba419e9e569294dfaefce0389e06 (patch)
tree4715c05a4b4ef50877e4c6d1bf02594518d84c63
parentc5dd241c34d1177f7fa17c28972606dbecc8613d (diff)
downloadnetpbm-mirror-5076ffea9a12ba419e9e569294dfaefce0389e06.tar.gz
netpbm-mirror-5076ffea9a12ba419e9e569294dfaefce0389e06.tar.xz
netpbm-mirror-5076ffea9a12ba419e9e569294dfaefce0389e06.zip
more fixes for targets entirely outside input image
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@4881 9d0c8265-081b-0410-96cb-a4ca84ce46f8
-rw-r--r--editor/pamcut.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/editor/pamcut.c b/editor/pamcut.c
index 31b44f81..b6190098 100644
--- a/editor/pamcut.c
+++ b/editor/pamcut.c
@@ -699,8 +699,9 @@ extractRowsGen(const struct pam * const inpamP,
     destroyRowCutter(rowCutterP);
 
     /* Write out bottom padding */
-    if (bottomrow > inpamP->height-1)
-        writeBlackRows(outpamP, bottomrow - (inpamP->height-1));
+    if (bottomrow >= inpamP->height)
+        writeBlackRows(outpamP, bottomrow - MAX(inpamP->height, toprow) + 1);
+
 }
 
 
@@ -758,14 +759,16 @@ extractRowsPbm(const struct pam * const inpamP,
     }
 
     bitrow = pbm_allocrow_packed(totalWidth);
-
-    makeBlackPbmRow(bitrow, totalWidth);
       /* Initialize row buffer to all black for top and side padding */
 
     /* Write out top padding */
-    for (row = toprow; row < MIN(0, bottomrow+1); ++row)
-        pbm_writepbmrow_packed(outpamP->file, bitrow, outpamP->width, 0);
+    if (toprow < 0) {
+        makeBlackPbmRow(bitrow, outpamP->width);
+        for (row = toprow; row < MIN(0, bottomrow+1); ++row)
+            pbm_writepbmrow_packed(outpamP->file, bitrow, outpamP->width, 0);
+    }
 
+    makeBlackPbmRow(bitrow, totalWidth);
     for (row = 0; row < inpamP->height; ++row){
         if (row >= toprow && row <= bottomrow) {
             pbm_readpbmrow_bitoffset(inpamP->file, bitrow, inpamP->width,
@@ -783,9 +786,11 @@ extractRowsPbm(const struct pam * const inpamP,
     }
 
     /* Write out bottom padding */
-    makeBlackPbmRow(bitrow, outpamP->width);
-    for (row = MAX(inpamP->height, toprow); row < bottomrow+1; ++row)
-        pbm_writepbmrow_packed(outpamP->file, bitrow, outpamP->width, 0);
+    if (bottomrow >= inpamP->height) {
+        makeBlackPbmRow(bitrow, outpamP->width);
+        for (row = MAX(inpamP->height, toprow); row < bottomrow+1; ++row)
+             pbm_writepbmrow_packed(outpamP->file, bitrow, outpamP->width, 0);
+    }
 
     pbm_freerow_packed(bitrow);
 }