Package org.libjpegturbo.turbojpeg

## Class TJCompressor

- java.lang.Object
- - org.libjpegturbo.turbojpeg.TJCompressor

- All Implemented Interfaces:
    `java.io.Closeable`, `java.lang.AutoCloseable`

      public class TJCompressor
      extends java.lang.Object
      implements java.io.Closeable

  TurboJPEG compressor

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `TJCompressor()` | Create a TurboJPEG compressor instance.
    `TJCompressor​(byte[] srcImage, int x, int y, int width, int pitch, int height, int pixelFormat)` | Create a TurboJPEG compressor instance and associate the packed-pixel source image, stored in `srcImage` with 2 to 8 bits of data precision per sample, with the newly created instance.
    `TJCompressor​(java.awt.image.BufferedImage srcImage, int x, int y, int width, int height)` | Create a TurboJPEG compressor instance and associate the 8-bit-per-sample packed-pixel source image stored in `srcImage` with the newly created instance.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `close()` | Free the native structures associated with this compressor instance.
    `byte[]` | `compress()` | Compress the packed-pixel or planar YUV source image associated with this compressor instance and return a buffer containing a JPEG image.
    `void` | `compress​(byte[] dstBuf)` | Compress the packed-pixel or planar YUV source image associated with this compressor instance and output a JPEG image to the given destination buffer.
    `YUVImage` | `encodeYUV​(int align)` | Encode the 8-bit-per-sample packed-pixel source image associated with this compressor instance into an 8-bit-per-sample unified planar YUV image and return a `YUVImage` instance containing the encoded image.
    `YUVImage` | `encodeYUV​(int[] strides)` | Encode the 8-bit-per-sample packed-pixel source image associated with this compressor instance into separate 8-bit-per-sample Y, U (Cb), and V (Cr) image planes and return a `YUVImage` instance containing the encoded image planes.
    `void` | `encodeYUV​(YUVImage dstImage)` | Encode the 8-bit-per-sample packed-pixel source image associated with this compressor instance into an 8-bit-per-sample planar YUV image and store it in the given `YUVImage` instance.
    `protected void` | `finalize()` |
    `int` | `get​(int param)` | Get the value of a compression parameter.
    `int` | `getCompressedSize()` | Returns the size of the image (in bytes) generated by the most recent compression operation.
    `int` | `getHeight()` | Returns the height of the source image (packed-pixel or YUV) associated with this compressor instance.
    `int` | `getPitch()` | Returns the pitch (samples per row) of the packed-pixel source image associated with this compressor instance.
    `int` | `getPixelFormat()` | Returns the pixel format of the packed-pixel source image associated with this compressor instance.
    `java.lang.Object` | `getSourceBuf()` | Returns the buffer containing the packed-pixel image associated with this compressor instance.
    `int` | `getWidth()` | Returns the width of the source image (packed-pixel or YUV) associated with this compressor instance.
    `void` | `loadSourceImage​(java.lang.String fileName, int align, int pixelFormat)` | Load a packed-pixel RGB or grayscale source image with 2 to 16 bits of data precision per sample from disk into memory and associate it with this compressor instance.
    `void` | `set​(int param, int value)` | Set the value of a compression parameter.
    `void` | `setICCProfile​(byte[] iccBuf)` | Embed an ICC (International Color Consortium) color management profile in JPEG images generated by subsequent compression operations.
    `void` | `setSourceImage​(byte[] srcImage, int x, int y, int width, int pitch, int height, int pixelFormat)` | Associate a packed-pixel RGB, grayscale, or CMYK source image with 2 to 8 bits of data precision per sample with this compressor instance.
    `void` | `setSourceImage​(java.awt.image.BufferedImage srcImage, int x, int y, int width, int height)` | Associate an 8-bit-per-sample packed-pixel RGB or grayscale source image with this compressor instance.
    `void` | `setSourceImage​(YUVImage srcImage)` | Associate an 8-bit-per-sample planar YUV source image with this compressor instance.
    `void` | `setSourceImage12​(short[] srcImage, int x, int y, int width, int pitch, int height, int pixelFormat)` | Associate a packed-pixel RGB, grayscale, or CMYK source image with 9 to 12 bits of data precision per sample with this compressor instance.
    `void` | `setSourceImage16​(short[] srcImage, int x, int y, int width, int pitch, int height, int pixelFormat)` | Associate a packed-pixel RGB, grayscale, or CMYK source image with 13 to 16 bits of data precision per sample with this compressor instance.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### TJCompressor

          public TJCompressor()
                       throws TJException

      Create a TurboJPEG compressor instance.
      Throws:
        `TJException`

    - #### TJCompressor

          public TJCompressor​(byte[] srcImage,
                              int x,
                              int y,
                              int width,
                              int pitch,
                              int height,
                              int pixelFormat)
                       throws TJException

      Create a TurboJPEG compressor instance and associate the packed-pixel source image, stored in `srcImage` with 2 to 8 bits of data precision per sample, with the newly created instance.
      Parameters:
        `srcImage` - see `setSourceImage(byte[], int, int, int, int, int, int)` for description
        `x` - see `setSourceImage(byte[], int, int, int, int, int, int)` for description
        `y` - see `setSourceImage(byte[], int, int, int, int, int, int)` for description
        `width` - see `setSourceImage(byte[], int, int, int, int, int, int)` for description
        `pitch` - see `setSourceImage(byte[], int, int, int, int, int, int)` for description
        `height` - see `setSourceImage(byte[], int, int, int, int, int, int)` for description
        `pixelFormat` - pixel format of the source image (one of `TJ.PF_*`)
      Throws:
        `TJException`

    - #### TJCompressor

          public TJCompressor​(java.awt.image.BufferedImage srcImage,
                              int x,
                              int y,
                              int width,
                              int height)
                       throws TJException

      Create a TurboJPEG compressor instance and associate the 8-bit-per-sample packed-pixel source image stored in `srcImage` with the newly created instance.
      Parameters:
        `srcImage` - see `setSourceImage(BufferedImage, int, int, int, int)` for description
        `x` - see `setSourceImage(BufferedImage, int, int, int, int)` for description
        `y` - see `setSourceImage(BufferedImage, int, int, int, int)` for description
        `width` - see `setSourceImage(BufferedImage, int, int, int, int)` for description
        `height` - see `setSourceImage(BufferedImage, int, int, int, int)` for description
      Throws:
        `TJException`

  - ### Method Detail

    - #### setSourceImage

          public void setSourceImage​(byte[] srcImage,
                                     int x,
                                     int y,
                                     int width,
                                     int pitch,
                                     int height,
                                     int pixelFormat)
                              throws TJException

      Associate a packed-pixel RGB, grayscale, or CMYK source image with 2 to 8 bits of data precision per sample with this compressor instance. Note that packed-pixel source images with 2 to 7 bits of data precision per sample can only be compressed into lossless JPEG images.
      Parameters:
        `srcImage` - buffer containing a packed-pixel RGB, grayscale, or CMYK source image to be compressed or encoded. The data precision of the source image (from 2 to 8 bits per sample) can be specified using `TJ.PARAM_PRECISION` and defaults to 8 if `TJ.PARAM_PRECISION` is unset or out of range. This buffer is not modified.
        `x` - x offset (in pixels) of the region in the source image from which the JPEG or YUV image should be compressed/encoded
        `y` - y offset (in pixels) of the region in the source image from which the JPEG or YUV image should be compressed/encoded
        `width` - width (in pixels) of the region in the source image from which the JPEG or YUV image should be compressed/encoded
        `pitch` - bytes per row in the source image. Normally this should be `width * `TJ.getPixelSize`(pixelFormat)`, if the source image is unpadded. (Setting this parameter to 0 is the equivalent of setting it to `width * `TJ.getPixelSize`(pixelFormat)`.) However, you can also use this parameter to specify the row alignment/padding of the source image, to skip rows, or to compress/encode a JPEG or YUV image from a specific region of a larger source image.
        `height` - height (in pixels) of the region in the source image from which the JPEG or YUV image should be compressed/encoded
        `pixelFormat` - pixel format of the source image (one of `TJ.PF_*`)
      Throws:
        `TJException`

    - #### setSourceImage12

          public void setSourceImage12​(short[] srcImage,
                                       int x,
                                       int y,
                                       int width,
                                       int pitch,
                                       int height,
                                       int pixelFormat)
                                throws TJException

      Associate a packed-pixel RGB, grayscale, or CMYK source image with 9 to 12 bits of data precision per sample with this compressor instance. Note that packed-pixel source images with 9 to 11 bits of data precision per sample can only be compressed into lossless JPEG images.
      Parameters:
        `srcImage` - buffer containing a packed-pixel RGB, grayscale, or CMYK source image to be compressed. The data precision of the source image (from 9 to 12 bits per sample) can be specified using `TJ.PARAM_PRECISION` and defaults to 12 if `TJ.PARAM_PRECISION` is unset or out of range. This buffer is not modified.
        `x` - x offset (in pixels) of the region in the source image from which the JPEG image should be compressed
        `y` - y offset (in pixels) of the region in the source image from which the JPEG image should be compressed
        `width` - width (in pixels) of the region in the source image from which the JPEG image should be compressed
        `pitch` - samples per row in the source image. Normally this should be `width * `TJ.getPixelSize`(pixelFormat)`, if the source image is unpadded. (Setting this parameter to 0 is the equivalent of setting it to `width * `TJ.getPixelSize`(pixelFormat)`.) However, you can also use this parameter to specify the row alignment/padding of the source image, to skip rows, or to compress a JPEG image from a specific region of a larger source image.
        `height` - height (in pixels) of the region in the source image from which the JPEG image should be compressed
        `pixelFormat` - pixel format of the source image (one of `TJ.PF_*`)
      Throws:
        `TJException`

    - #### setSourceImage16

          public void setSourceImage16​(short[] srcImage,
                                       int x,
                                       int y,
                                       int width,
                                       int pitch,
                                       int height,
                                       int pixelFormat)
                                throws TJException

      Associate a packed-pixel RGB, grayscale, or CMYK source image with 13 to 16 bits of data precision per sample with this compressor instance. Note that packed-pixel source images with 13 to 16 bits of data precision per sample can only be compressed into lossless JPEG images.
      Parameters:
        `srcImage` - buffer containing a packed-pixel RGB, grayscale, or CMYK source image to be compressed. The data precision of the source image (from 13 to 16 bits per sample) can be specified using `TJ.PARAM_PRECISION` and defaults to 16 if `TJ.PARAM_PRECISION` is unset or out of range. This buffer is not modified.
        `x` - x offset (in pixels) of the region in the source image from which the JPEG image should be compressed
        `y` - y offset (in pixels) of the region in the source image from which the JPEG image should be compressed
        `width` - width (in pixels) of the region in the source image from which the JPEG image should be compressed
        `pitch` - samples per row in the source image. Normally this should be `width * `TJ.getPixelSize`(pixelFormat)`, if the source image is unpadded. (Setting this parameter to 0 is the equivalent of setting it to `width * `TJ.getPixelSize`(pixelFormat)`.) However, you can also use this parameter to specify the row alignment/padding of the source image, to skip rows, or to compress a JPEG image from a specific region of a larger source image.
        `height` - height (in pixels) of the region in the source image from which the JPEG image should be compressed
        `pixelFormat` - pixel format of the source image (one of `TJ.PF_*`)
      Throws:
        `TJException`

    - #### setSourceImage

          public void setSourceImage​(java.awt.image.BufferedImage srcImage,
                                     int x,
                                     int y,
                                     int width,
                                     int height)
                              throws TJException

      Associate an 8-bit-per-sample packed-pixel RGB or grayscale source image with this compressor instance.
      Parameters:
        `srcImage` - a `BufferedImage` instance containing a packed-pixel RGB or grayscale source image to be compressed or encoded. This image is not modified.
        `x` - x offset (in pixels) of the region in the source image from which the JPEG or YUV image should be compressed/encoded
        `y` - y offset (in pixels) of the region in the source image from which the JPEG or YUV image should be compressed/encoded
        `width` - width (in pixels) of the region in the source image from which the JPEG or YUV image should be compressed/encoded (0 = use the width of the source image)
        `height` - height (in pixels) of the region in the source image from which the JPEG or YUV image should be compressed/encoded (0 = use the height of the source image)
      Throws:
        `TJException`

    - #### setSourceImage

          public void setSourceImage​(YUVImage srcImage)
                              throws TJException

      Associate an 8-bit-per-sample planar YUV source image with this compressor instance. This method sets `TJ.PARAM_SUBSAMP` to the chrominance subsampling level of the source image.
      Parameters:
        `srcImage` - planar YUV source image to be compressed. This image is not modified.
      Throws:
        `TJException`

    - #### loadSourceImage

          public void loadSourceImage​(java.lang.String fileName,
                                      int align,
                                      int pixelFormat)
                               throws TJException

      Load a packed-pixel RGB or grayscale source image with 2 to 16 bits of data precision per sample from disk into memory and associate it with this compressor instance. Note that packed-pixel source images with 2 to 7, 9 to 11, or 13 to 16 bits of data precision per sample can only be compressed into lossless JPEG images.

      `getWidth()`, `getPitch()`, `getHeight()`, `getPixelFormat()`, and `getSourceBuf()` can be used to obtain the source image's dimensions, pixel format, and buffer after it is loaded.

      Parameters:
        `fileName` - name of a file containing a packed-pixel image in Windows BMP or PBMPLUS (PPM/PGM) format. Windows BMP files require 8-bit-per-sample data precision. When loading a PBMPLUS file, the target data precision (from 2 to 16 bits per sample) can be specified using `TJ.PARAM_PRECISION` and defaults to 8 if `TJ.PARAM_PRECISION` is unset. If the data precision of the PBMPLUS file does not match the target data precision, then upconverting or downconverting will be performed.
        `align` - row alignment (in samples) of the packed-pixel buffer into which the source image will be loaded (must be a power of 2.) Setting this parameter to n will cause all rows in the buffer to be padded to the nearest multiple of n samples (1 = unpadded.)
        `pixelFormat` - pixel format of the packed-pixel buffer into which the source image will be loaded. The behavior of this method varies depending on the value of `pixelFormat`:
        - `TJ.PF_UNKNOWN` : The packed-pixel buffer created by this method will use the most optimal pixel format for the file type. Use `getPixelFormat()` to obtain the ID of that pixel format.
        - `TJ.PF_GRAY` : Only PGM files and 8-bit-per-pixel BMP files with a grayscale colormap can be loaded.
        - `TJ.PF_CMYK` : The RGB or grayscale pixels stored in the file will be converted using a quick & dirty algorithm that is suitable only for testing purposes. (Proper conversion between CMYK and other formats requires a color management system.)
        - Other `pixel formats` : The packed-pixel buffer will use the specified pixel format, and pixel format conversion will be performed if necessary.
      Throws:
        `TJException`

    - #### getWidth

          public int getWidth()

      Returns the width of the source image (packed-pixel or YUV) associated with this compressor instance.
      Returns:
        the width of the source image (packed-pixel or YUV) associated with this compressor instance.

    - #### getPitch

          public int getPitch()

      Returns the pitch (samples per row) of the packed-pixel source image associated with this compressor instance. If the source image is a `BufferedImage` instance with integer pixels, then the stride (pixels per row) is returned instead.
      Returns:
        the pitch (samples per row) of the packed-pixel source image associated with this compressor instance.

    - #### getHeight

          public int getHeight()

      Returns the height of the source image (packed-pixel or YUV) associated with this compressor instance.
      Returns:
        the height of the source image (packed-pixel or YUV) associated with this compressor instance.

    - #### getPixelFormat

          public int getPixelFormat()

      Returns the pixel format of the packed-pixel source image associated with this compressor instance. The pixel format is one of `TJ.PF_*`.
      Returns:
        the pixel format of the packed-pixel source image associated with this compressor instance.

    - #### getSourceBuf

          public java.lang.Object getSourceBuf()

      Returns the buffer containing the packed-pixel image associated with this compressor instance. The buffer is a `byte` array if the source image has 2 to 8 bits of data precision per sample, a `short` array if the source image has 9 to 16 bits of data precision per sample, and either a `byte` or an `int` array (depending on the image type) if the source image is a `BufferedImage` instance.
      Returns:
        the buffer containing the packed-pixel image associated with this compressor instance.

    - #### set

          public void set​(int param,
                          int value)

      Set the value of a compression parameter.
      Parameters:
        `param` - one of `TJ.PARAM_*`
        `value` - value of the compression parameter (refer to `parameter documentation`)

    - #### get

          public int get​(int param)

      Get the value of a compression parameter.
      Parameters:
        `param` - one of `TJ.PARAM_*`
      Returns:
        the value of the specified compression parameter, or -1 if the value is unknown.

    - #### setICCProfile

          public void setICCProfile​(byte[] iccBuf)
                             throws TJException

      Embed an ICC (International Color Consortium) color management profile in JPEG images generated by subsequent compression operations.
      Parameters:
        `iccBuf` - buffer containing an ICC profile. (The size of the ICC profile is assumed to be the length of the array.) A copy is made of the ICC profile, so this buffer can be reused as soon as this method returns. Setting this parameter to null removes any ICC profile that was previously associated with this compressor instance.
      Throws:
        `TJException`

    - #### compress

          public void compress​(byte[] dstBuf)
                        throws TJException

      Compress the packed-pixel or planar YUV source image associated with this compressor instance and output a JPEG image to the given destination buffer.
      Parameters:
        `dstBuf` - buffer that will receive the JPEG image. Use `TJ.bufSize()` to determine the maximum size for this buffer based on the source image's width and height and the desired level of chrominance subsampling (see `TJ.PARAM_SUBSAMP`), then add the size of the ICC profile (if any) that was previously associated with this compressor instance (see `setICCProfile()`.)
      Throws:
        `TJException`

    - #### compress

          public byte[] compress()
                          throws TJException

      Compress the packed-pixel or planar YUV source image associated with this compressor instance and return a buffer containing a JPEG image.
      Returns:
        a buffer containing a JPEG image. The length of this buffer will not be equal to the size of the JPEG image. Use `getCompressedSize()` to obtain the size of the JPEG image.
      Throws:
        `TJException`

    - #### encodeYUV

          public void encodeYUV​(YUVImage dstImage)
                         throws TJException

      Encode the 8-bit-per-sample packed-pixel source image associated with this compressor instance into an 8-bit-per-sample planar YUV image and store it in the given `YUVImage` instance. This method performs color conversion and downsampling (which are accelerated in the libjpeg-turbo implementation) but does not execute any of the other steps in the JPEG compression process. Encoding CMYK source images into YUV images is not supported. This method sets `TJ.PARAM_SUBSAMP` to the chrominance subsampling level of the destination image.
      Parameters:
        `dstImage` - `YUVImage` instance that will receive the planar YUV image
      Throws:
        `TJException`

    - #### encodeYUV

          public YUVImage encodeYUV​(int align)
                             throws TJException

      Encode the 8-bit-per-sample packed-pixel source image associated with this compressor instance into an 8-bit-per-sample unified planar YUV image and return a `YUVImage` instance containing the encoded image. This method performs color conversion and downsampling (which are accelerated in the libjpeg-turbo implementation) but does not execute any of the other steps in the JPEG compression process. Encoding CMYK source images into YUV images is not supported.
      Parameters:
        `align` - row alignment (in bytes) of the YUV image (must be a power of 2.) Setting this parameter to n will cause each row in each plane of the YUV image to be padded to the nearest multiple of n bytes (1 = unpadded.)
      Returns:
        a `YUVImage` instance containing the unified planar YUV encoded image
      Throws:
        `TJException`

    - #### encodeYUV

          public YUVImage encodeYUV​(int[] strides)
                             throws TJException

      Encode the 8-bit-per-sample packed-pixel source image associated with this compressor instance into separate 8-bit-per-sample Y, U (Cb), and V (Cr) image planes and return a `YUVImage` instance containing the encoded image planes. This method performs color conversion and downsampling (which are accelerated in the libjpeg-turbo implementation) but does not execute any of the other steps in the JPEG compression process. Encoding CMYK source images into YUV images is not supported.
      Parameters:
        `strides` - an array of integers, each specifying the number of bytes per row in the corresponding plane of the YUV source image. Setting the stride for any plane to 0 is the same as setting it to the plane width (see `YUVImage`.) If `strides` is null, then the strides for all planes will be set to their respective plane widths. You can adjust the strides in order to add an arbitrary amount of row padding to each plane.
      Returns:
        a `YUVImage` instance containing the encoded image planes
      Throws:
        `TJException`

    - #### getCompressedSize

          public int getCompressedSize()

      Returns the size of the image (in bytes) generated by the most recent compression operation.
      Returns:
        the size of the image (in bytes) generated by the most recent compression operation.

    - #### close

          public void close()
                     throws TJException

      Free the native structures associated with this compressor instance.
      Specified by:
        `close` in interface `java.lang.AutoCloseable`
      Specified by:
        `close` in interface `java.io.Closeable`
      Throws:
        `TJException`

    - #### finalize

          protected void finalize()
                           throws java.lang.Throwable

      Overrides:
        `finalize` in class `java.lang.Object`
      Throws:
        `java.lang.Throwable`