com.sun.pdfview.decode
Class DCTDecode

java.lang.Object
  extended by com.sun.pdfview.decode.DCTDecode

public class DCTDecode
extends java.lang.Object

decode a DCT encoded array into a byte array. This class uses Java's built-in JPEG image class to do the decoding.


Constructor Summary
DCTDecode()
           
 
Method Summary
protected static java.nio.ByteBuffer decode(PDFObject dict, java.nio.ByteBuffer buf, PDFObject params)
          decode an array of bytes in DCT format.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DCTDecode

public DCTDecode()
Method Detail

decode

protected static java.nio.ByteBuffer decode(PDFObject dict,
                                            java.nio.ByteBuffer buf,
                                            PDFObject params)
                                     throws PDFParseException
decode an array of bytes in DCT format.

DCT is the format used by JPEG images, so this class simply loads the DCT-format bytes as an image, then reads the bytes out of the image to create the array. If this were to be used against image objects we'd end up wasting a lot of work, because we'd be generating a buffered image here, writing out the bytes, and then generating a buffered image again from those bytes in the PDFImage class.

Luckily, the image processing has been optimised to detect DCT decodes at the end of filters, in which case it avoids running the stream through this filter, and just directly generates a BufferedImage from the DCT encoded byte stream. As such, this decode will be invoked only if there's been some very unusual employment of filters in the PDF - e.g., DCTDecode applied to non-image data, or if DCTDecode is not at the end of a Filter dictionary entry. This is permissible but unlikely to occur in practice.

The DCT-encoded stream may have 1, 3 or 4 samples per pixel, depending on the colorspace of the image. In decoding, we look for the colorspace in the stream object's dictionary to decide how to decode this image. If no colorspace is present, we guess 3 samples per pixel.

Parameters:
dict - the stream dictionary
buf - the DCT-encoded buffer
params - the parameters to the decoder (ignored)
Returns:
the decoded buffer
Throws:
PDFParseException