You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2016/11/28 17:13:00 UTC

svn commit: r1771771 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java

Author: tilman
Date: Mon Nov 28 17:12:59 2016
New Revision: 1771771

URL: http://svn.apache.org/viewvc?rev=1771771&view=rev
Log:
PDFBOX-3599: support DataBufferUShort for 16 bit images

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java?rev=1771771&r1=1771770&r2=1771771&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java Mon Nov 28 17:12:59 2016
@@ -19,6 +19,7 @@ package org.apache.pdfbox.filter;
 import java.awt.image.BufferedImage;
 import java.awt.image.DataBuffer;
 import java.awt.image.DataBufferByte;
+import java.awt.image.DataBufferUShort;
 import java.awt.image.WritableRaster;
 import java.io.IOException;
 import java.io.InputStream;
@@ -56,14 +57,28 @@ public final class JPXFilter extends Fil
         BufferedImage image = readJPX(encoded, result);
 
         WritableRaster raster = image.getRaster();
-        if (raster.getDataBuffer().getDataType() != DataBuffer.TYPE_BYTE)
+        switch (raster.getDataBuffer().getDataType())
         {
-            throw new IOException("Not implemented: greater than 8-bit depth");
-        }
-        DataBufferByte buffer = (DataBufferByte)raster.getDataBuffer();
-        decoded.write(buffer.getData());
+            case DataBuffer.TYPE_BYTE:
+                DataBufferByte byteBuffer = (DataBufferByte) raster.getDataBuffer();
+                decoded.write(byteBuffer.getData());
+                return result;
 
-        return result;
+            case DataBuffer.TYPE_USHORT:
+                DataBufferUShort wordBuffer = (DataBufferUShort) raster.getDataBuffer();
+                int size = wordBuffer.getSize();
+                short[] data = wordBuffer.getData();
+                for (int i = 0; i < size; ++i)
+                {
+                    short w = data[i];
+                    decoded.write(w >> 8);
+                    decoded.write(w);
+                }
+                return result;
+
+            default:
+                throw new IOException("Data type " + raster.getDataBuffer().getDataType() + " not implemented");
+        }        
     }
 
     // try to read using JAI Image I/O