This is an automated email from the ASF dual-hosted git repository.

tilman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pdfbox-jbig2.git


The following commit(s) were added to refs/heads/master by this push:
     new 4a2e9db  PDFBOX-6154: replace and remove buggy shiftAndFill(); use 
computeX/computeY for HSKIP too; optimize HSKIP creation by setting only 
1-pixels
4a2e9db is described below

commit 4a2e9db0815ef3c31b75ceb7e58693a48014dd00
Author: Tilman Hausherr <[email protected]>
AuthorDate: Fri Jan 30 12:43:52 2026 +0100

    PDFBOX-6154: replace and remove buggy shiftAndFill(); use computeX/computeY 
for HSKIP too; optimize HSKIP creation by setting only 1-pixels
---
 .../pdfbox/jbig2/segments/HalftoneRegion.java      | 33 ++++------------------
 1 file changed, 5 insertions(+), 28 deletions(-)

diff --git a/src/main/java/org/apache/pdfbox/jbig2/segments/HalftoneRegion.java 
b/src/main/java/org/apache/pdfbox/jbig2/segments/HalftoneRegion.java
index bad0bb9..57ea666 100644
--- a/src/main/java/org/apache/pdfbox/jbig2/segments/HalftoneRegion.java
+++ b/src/main/java/org/apache/pdfbox/jbig2/segments/HalftoneRegion.java
@@ -341,32 +341,12 @@ public class HalftoneRegion implements Region
 
     private int computeX(final int m, final int n)
     {
-        return shiftAndFill((hGridX + m * hRegionY + n * hRegionX));
+        return (hGridX + m * hRegionY + n * hRegionX) >> 8;
     }
 
     private int computeY(final int m, final int n)
     {
-        return shiftAndFill((hGridY + m * hRegionX - n * hRegionY));
-    }
-
-    private int shiftAndFill(int value)
-    {
-        // shift value by 8 and let the leftmost 8 bits be 0
-        value >>= 8;
-
-        if (value < 0)
-        {
-            // fill the leftmost 8 bits with 1
-            final int bitPosition = (int) 
(Math.log(Integer.highestOneBit(value)) / Math.log(2));
-
-            for (int i = 1; i < 31 - bitPosition; i++)
-            {
-                // bit flip
-                value |= 1 << (31 - i);
-            }
-        }
-
-        return value;
+        return (hGridY + m * hRegionX - n * hRegionY) >> 8;
     }
 
     public void init(final SegmentHeader header, final SubInputStream sis)
@@ -446,18 +426,15 @@ public class HalftoneRegion implements Region
         {
             for (int n = 0; n < hGridWidth; ++n)
             {
-                int x = (hGridX + m * hRegionY + n * hRegionX) >> 8;
-                int y = (hGridY + m * hRegionX - n * hRegionY) >> 8;
+                int x = computeX(m, n);
+                int y = computeY(m, n);
                 // HBW = halftoneRegionBitmap.getWidth()
                 // HBH = halftoneRegionBitmap.getHeight()
                 if (x + hPatternWidth <= 0 || x >= 
halftoneRegionBitmap.getWidth() || y + hPatternHeight <= 0 || y >= 
halftoneRegionBitmap.getHeight())
                 {
                     bitmap.setPixel(n, m, (byte) 1);
                 }
-                else
-                {
-                    bitmap.setPixel(n, m, (byte) 0);
-                }
+                // else no need to set 0 pixels
             }
         }
         return bitmap;

Reply via email to