Author: tilman
Date: Wed Aug 21 13:44:26 2024
New Revision: 1920116
URL: http://svn.apache.org/viewvc?rev=1920116&view=rev
Log:
PDFBOX-5660: split long method
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java?rev=1920116&r1=1920115&r2=1920116&view=diff
==============================================================================
---
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
(original)
+++
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
Wed Aug 21 13:44:26 2024
@@ -78,40 +78,7 @@ final class DCTFilter extends Filter
irp.setSourceRegion(options.getSourceRegion());
options.setFilterSubsampled(true);
- String numChannels = getNumChannels(reader);
-
- // get the raster using horrible JAI workarounds
- ImageIO.setUseCache(false);
- Raster raster;
-
- // Strategy: use read() for RGB or "can't get metadata"
- // use readRaster() for CMYK and gray and as fallback if read()
fails
- // after "can't get metadata" because "no meta" file was CMYK
- if ("3".equals(numChannels) || numChannels.isEmpty())
- {
- try
- {
- // I'd like to use ImageReader#readRaster but it is buggy
and can't read RGB correctly
- BufferedImage image = reader.read(0, irp);
- if (image.getColorModel().getNumColorComponents() == 4)
- {
- throw new IIOException("CMYK image");
- }
- raster = image.getRaster();
- }
- catch (IIOException e)
- {
- // JAI can't read CMYK JPEGs using ImageReader#read or
ImageIO.read but
- // fortunately ImageReader#readRaster isn't buggy when
reading 4-channel files
- raster = reader.readRaster(0, irp);
- }
- }
- else
- {
- // JAI can't read CMYK JPEGs using ImageReader#read or
ImageIO.read but
- // fortunately ImageReader#readRaster isn't buggy when reading
4-channel files
- raster = reader.readRaster(0, irp);
- }
+ Raster raster = readImageRaster(reader, irp);
// special handling for 4-component images
if (raster.getNumBands() == 4)
@@ -176,6 +143,43 @@ final class DCTFilter extends Filter
return new DecodeResult(parameters);
}
+ private Raster readImageRaster(ImageReader reader, ImageReadParam irp)
throws IOException
+ {
+ String numChannels = getNumChannels(reader);
+ // get the raster using horrible JAI workarounds
+ ImageIO.setUseCache(false);
+ Raster raster;
+ // Strategy: use read() for RGB or "can't get metadata"
+ // use readRaster() for CMYK and gray and as fallback if read() fails
+ // after "can't get metadata" because "no meta" file was CMYK
+ if ("3".equals(numChannels) || numChannels.isEmpty())
+ {
+ try
+ {
+ // I'd like to use ImageReader#readRaster but it is buggy and
can't read RGB correctly
+ BufferedImage image = reader.read(0, irp);
+ if (image.getColorModel().getNumColorComponents() == 4)
+ {
+ throw new IIOException("CMYK image");
+ }
+ raster = image.getRaster();
+ }
+ catch (IIOException e)
+ {
+ // JAI can't read CMYK JPEGs using ImageReader#read or
ImageIO.read but
+ // fortunately ImageReader#readRaster isn't buggy when reading
4-channel files
+ raster = reader.readRaster(0, irp);
+ }
+ }
+ else
+ {
+ // JAI can't read CMYK JPEGs using ImageReader#read or
ImageIO.read but
+ // fortunately ImageReader#readRaster isn't buggy when reading
4-channel files
+ raster = reader.readRaster(0, irp);
+ }
+ return raster;
+ }
+
@Override
public DecodeResult decode(InputStream encoded, OutputStream decoded,
COSDictionary parameters, int index) throws
IOException