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 2014/03/04 20:34:50 UTC

svn commit: r1574180 - in /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter: FilterManager.java JPXFilter.java

Author: tilman
Date: Tue Mar  4 19:34:50 2014
New Revision: 1574180

URL: http://svn.apache.org/r1574180
Log:
PDFBOX-52: use JPXFilter instead of DCTFilter

Modified:
    pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java
    pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java

Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java?rev=1574180&r1=1574179&r2=1574180&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java Tue Mar  4 19:34:50 2014
@@ -32,7 +32,7 @@ import org.apache.pdfbox.cos.COSName;
  */
 public class FilterManager
 {
-    private Map<COSName, Filter> filters = new HashMap<COSName, Filter>();
+    private final Map<COSName, Filter> filters = new HashMap<COSName, Filter>();
 
     /**
      * Constructor.
@@ -40,7 +40,6 @@ public class FilterManager
     public FilterManager()
     {
         Filter flateFilter = new FlateFilter();
-        Filter dctFilter = new DCTFilter();
         Filter ccittFaxFilter = new CCITTFaxDecodeFilter();
         Filter lzwFilter = new LZWFilter();
         Filter asciiHexFilter = new ASCIIHexFilter();
@@ -52,8 +51,8 @@ public class FilterManager
         
         addFilter( COSName.FLATE_DECODE, flateFilter );
         addFilter( COSName.FLATE_DECODE_ABBREVIATION, flateFilter );
-        addFilter( COSName.DCT_DECODE, dctFilter );
-        addFilter( COSName.DCT_DECODE_ABBREVIATION, dctFilter );
+        addFilter( COSName.DCT_DECODE, jpxFilter);
+        addFilter( COSName.DCT_DECODE_ABBREVIATION, jpxFilter);
         addFilter( COSName.CCITTFAX_DECODE, ccittFaxFilter );
         addFilter( COSName.CCITTFAX_DECODE_ABBREVIATION, ccittFaxFilter );
         addFilter( COSName.LZW_DECODE, lzwFilter );
@@ -66,8 +65,7 @@ public class FilterManager
         addFilter( COSName.RUN_LENGTH_DECODE_ABBREVIATION, runLengthFilter );
         addFilter( COSName.CRYPT, cryptFilter );
         addFilter( COSName.JPX_DECODE, jpxFilter );
-        addFilter( COSName.JBIG2_DECODE, jbig2Filter );
-        
+        addFilter( COSName.JBIG2_DECODE, jbig2Filter );        
     }
 
     /**

Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java?rev=1574180&r1=1574179&r2=1574180&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java Tue Mar  4 19:34:50 2014
@@ -69,7 +69,26 @@ public class JPXFilter implements Filter
                 options.setInt(COSName.BITS_PER_COMPONENT, colorModel.getPixelSize() / colorModel.getNumComponents());
                 options.setInt(COSName.HEIGHT, bi.getHeight());
                 options.setInt(COSName.WIDTH, bi.getWidth());
-                result.write(((DataBufferByte) dBuf).getData());
+                
+                if (bi.getType() == BufferedImage.TYPE_3BYTE_BGR)
+                {
+                    // PDFBOX-52
+                    byte[] byteBuffer = ((DataBufferByte) dBuf).getData();
+                    for (int i = 0; i < byteBuffer.length; i += 3)
+                    {
+                        //BGR
+                        //to
+                        //RGB
+                        byte tmp0 = byteBuffer[i];
+                        byteBuffer[i] = byteBuffer[i + 2];
+                        byteBuffer[i + 2] = tmp0;
+                    }
+                    result.write(byteBuffer);
+                }
+                else
+                {
+                    result.write(((DataBufferByte) dBuf).getData());
+                }
             }
             else
             {