Class PDFImage

java.lang.Object
org.openpdf.renderer.PDFImage

public class PDFImage extends Object
Encapsulates a PDF Image
  • Field Details

    • GREY_TO_ARGB

      private static int[][] GREY_TO_ARGB
    • colorKeyMask

      private int[] colorKeyMask
      color key mask. Array of start/end pairs of ranges of color components to mask out. If a component falls within any of the ranges it is clear.
    • width

      private int width
      the width of this image in pixels
    • height

      private int height
      the height of this image in pixels
    • colorSpace

      private PDFColorSpace colorSpace
      the colorspace to interpret the samples in
    • bpc

      private int bpc
      the number of bits per sample component
    • imageMask

      private boolean imageMask
      whether this image is a mask or not
    • sMask

      private PDFImage sMask
      the SMask image, if any
    • decode

      private float[] decode
      the decode array
    • imageObj

      private final PDFObject imageObj
      the actual image data
    • jpegDecode

      private final boolean jpegDecode
      true if the image is in encoded in JPEG
  • Constructor Details

  • Method Details

    • createImage

      public static PDFImage createImage(PDFObject obj, Map<String,PDFObject> resources, boolean useAsSMask) throws IOException
      Read a PDFImage from an image dictionary and stream
      Parameters:
      obj - the PDFObject containing the image's dictionary and stream
      resources - the current resources
      useAsSMask - - flag for switching colors in case image is used as sMask internally this is needed for handling transparency in smask images.
      Throws:
      IOException
    • getImage

      public BufferedImage getImage() throws PDFImageParseException
      Get the image that this PDFImage generates.
      Returns:
      a buffered image containing the decoded image data
      Throws:
      PDFImageParseException
    • parseData

      protected BufferedImage parseData(byte[] data, ByteBuffer jpegData) throws IOException

      Parse the image stream into a buffered image. Note that this is guaranteed to be called after all the other setXXX methods have been called.

      NOTE: the color convolving is extremely slow on large images. It would be good to see if it could be moved out into the rendering phases, where we might be able to scale the image down first. </p

      Parameters:
      data - the data when already completely filtered and uncompressed
      jpegData - a byte buffer if data still requiring the DCDTecode filter is being used
      Throws:
      IOException
    • scaleSMaskImage

      private BufferedImage scaleSMaskImage(PDFImage sMaskImage) throws PDFImageParseException
      Scale the softmask image to the size of the actual image
      Parameters:
      sMaskImage -
      Returns:
      Throws:
      PDFImageParseException
    • isGreyscale

      private boolean isGreyscale(ColorSpace aCs)
    • convertGreyscaleToArgb

      private BufferedImage convertGreyscaleToArgb(byte[] data, BufferedImage bi)
    • getGreyToArgbMap

      private static int[] getGreyToArgbMap(int numBits)
    • createGreyToArgbMap

      private static int[] createGreyToArgbMap(int numBits)
      Create a map from all bit-patterns of a certain depth greyscale to the corresponding sRGB values via the ICC colorr converter.
      Parameters:
      numBits - the number of greyscale bits
      Returns:
      a 2^bits array of standard 32-bit ARGB fits for each greyscale value at that bitdepth
    • biColorToGrayscale

      private BufferedImage biColorToGrayscale(WritableRaster raster, byte[] ncc)
      Creates a new image of type TYPE_BYTE_GRAY which represents the given raster
      Parameters:
      raster - Raster of an image with just two colors, bitwise encoded
      ncc - Array with two entries that describe the corresponding gray values
    • getWidth

      public int getWidth()
      Get the image's width
    • setWidth

      protected void setWidth(int width)
      Set the image's width
    • getHeight

      public int getHeight()
      Get the image's height
    • setHeight

      protected void setHeight(int height)
      Set the image's height
    • setColorKeyMask

      private void setColorKeyMask(PDFObject maskArrayObject) throws IOException
      set the color key mask. It is an array of start/end entries to indicate ranges of color indicies that should be masked out.
      Parameters:
      maskArrayObject -
      Throws:
      IOException
    • getColorSpace

      protected PDFColorSpace getColorSpace()
      Get the colorspace associated with this image, or null if there isn't one
    • setColorSpace

      protected void setColorSpace(PDFColorSpace colorSpace)
      Set the colorspace associated with this image
    • getBitsPerComponent

      protected int getBitsPerComponent()
      Get the number of bits per component sample
    • setBitsPerComponent

      protected void setBitsPerComponent(int bpc)
      Set the number of bits per component sample
    • isImageMask

      public boolean isImageMask()
      Return whether or not this is an image mask
    • setImageMask

      public void setImageMask(boolean imageMask)
      Set whether or not this is an image mask
    • getSMask

      public PDFImage getSMask()
      Return the soft mask associated with this image
    • setSMask

      protected void setSMask(PDFImage sMask)
      Set the soft mask image
    • getDecode

      protected float[] getDecode()
      Get the decode array
    • setDecode

      protected void setDecode(float[] decode)
      Set the decode array
    • getColorModel

      private ColorModel getColorModel()
      get a Java ColorModel consistent with the current color space, number of bits per component and decode array
      Parameters:
      bpc - the number of bits per component
    • normalize

      private float[] normalize(byte[] pixels, float[] normComponents, int normOffset)
      Normalize an array of values to match the decode array
    • createColorModel

      private ColorModel createColorModel()
      get a Java ColorModel consistent with the current color space, number of bits per component and decode array
      Parameters:
      bpc - the number of bits per component