using System; /// ********************************************************************** /// ********************************************************************** /// ********************************************************************** /// *** COPYRIGHT (c) 1997-1998 Eastman Kodak Company. *** /// *** As an unpublished work pursuant to Title 17 of the United *** /// *** States Code. All rights reserved. *** /// ********************************************************************** /// ********************************************************************** /// ********************************************************************** namespace com.codec.jpeg { /// /// JPEGDecodeParam encapsulates tables and options necessary to /// control decoding JPEG datastreams. Parameters are either set explicitly /// by the application for encoding, or read from the JPEG header for /// decoding. In the case of decoding abbreviated data streams the /// application may need to set some/all of the values it's self. /// /// When working with BufferedImages, the codec will attempt to /// generate an appropriate ColorModel for the JPEG COLOR_ID. This is /// not always possible (example mappings are listed below) . In cases /// where unsupported conversions are required, or unknown encoded /// COLOR_ID's are in use, the user must request the data as a Raster /// and perform the transformations themselves. When decoding into a /// raster no ColorSpace /// adjustments are made. /// /// Note: The color ids described herein are simply enumerated values /// that influence data processing by the JPEG codec. JPEG compression /// is by definition color blind. These values are used as hints when /// decompressing JPEG data. Of particular interest is the default /// conversion from YCbCr to sRGB when decoding buffered Images. /// /// Note: because JPEG is mostly color-blind color fidelity can not be /// garunteed. This will hopefully be rectified in the near future by /// the wide spread inclusion of ICC-profiles in the JPEG data stream /// (as a special marker). /// /// The following is an example of the conversions that take place. /// This is only a guide to the types of conversions that are allowed. /// This list is likely to change in the future so it is /// strongly recommended that you check for thrown /// ImageFormatExceptions and check the actual ColorModel associated /// with the BufferedImage returned rather than make assumtions. /// /// DECODING: /// /// JPEG (Encoded) Color ID BufferedImage ColorSpace /// ======================= ======================== /// COLOR_ID_UNKNOWN ** Invalid ** /// COLOR_ID_GRAY CS_GRAY /// COLOR_ID_RGB CS_sRGB /// COLOR_ID_YCbCr CS_sRGB /// COLOR_ID_CMYK ** Invalid ** /// COLOR_ID_PYCC CS_PYCC /// COLOR_ID_RGBA CS_sRGB (w/ alpha) /// COLOR_ID_YCbCrA CS_sRGB (w/ alpha) /// COLOR_ID_RGBA_INVERTED ** Invalid ** /// COLOR_ID_YCbCrA_INVERTED ** Invalid ** /// COLOR_ID_PYCCA CS_PYCC (w/ alpha) /// COLOR_ID_YCCK ** Invalid ** /// /// If the user needs better control over conversion, the user must /// request the data as a Raster and handle the conversion of the image /// data themselves. /// /// When decoding JFIF files the encoded COLOR_ID will always be one /// of: COLOR_ID_UNKNOWN, COLOR_ID_GRAY, COLOR_ID_RGB, COLOR_ID_YCbCr, /// COLOR_ID_CMYK, or COLOR_ID_YCCK /// /// Note that the classes in the com.sun.image.codec.jpeg package are not /// part of the core Java APIs. They are a part of Sun's JDK and JRE /// distributions. Although other licensees may choose to distribute these /// classes, developers cannot depend on their availability in non-Sun /// implementations. We expect that equivalent functionality will eventually /// be available in a core API or standard extension. /// public abstract class JPEGDecodeParam { /// /// Unknown or Undefined Color ID /// public readonly static int COLOR_ID_UNKNOWN = 0; /// /// Monochrome /// public readonly static int COLOR_ID_GRAY = 1; /// /// Red, Green, and Blue /// public readonly static int COLOR_ID_RGB = 2; /// /// YCbCr /// public readonly static int COLOR_ID_YCbCr = 3; /// /// CMYK /// public readonly static int COLOR_ID_CMYK = 4; /// /// PhotoYCC /// public readonly static int COLOR_ID_PYCC = 5; /// /// RGB-Alpha /// public readonly static int COLOR_ID_RGBA = 6; /// /// YCbCr-Alpha /// public readonly static int COLOR_ID_YCbCrA = 7; /// /// RGB-Alpha with R, G, and B inverted. /// public readonly static int COLOR_ID_RGBA_INVERTED = 8; /// /// YCbCr-Alpha with Y, Cb, and Cr inverted. /// public readonly static int COLOR_ID_YCbCrA_INVERTED = 9; /// /// PhotoYCC-Alpha /// public readonly static int COLOR_ID_PYCCA = 10; /// /// YCbCrK /// public readonly static int COLOR_ID_YCCK = 11; /// /// Number of color ids defined. /// public readonly static int NUM_COLOR_ID = 12; /// /// Number of allowed Huffman and Quantization Tables /// public readonly static int NUM_TABLES = 4; /// /// The X and Y units simply indicate the aspect ratio of the pixels. /// public readonly static int DENSITY_UNIT_ASPECT_RATIO = 0; /// /// Pixel density is in pixels per inch. /// public readonly static int DENSITY_UNIT_DOTS_INCH = 1; /// /// Pixel density is in pixels per centemeter. /// public readonly static int DENSITY_UNIT_DOTS_CM = 2; /// /// The max known value for DENSITY_UNIT /// public readonly static int NUM_DENSITY_UNIT = 3; /// /// APP0 marker - JFIF info /// public readonly static int APP0_MARKER = 0xE0; /// /// APP1 marker /// public readonly static int APP1_MARKER = 0xE1; /// /// APP2 marker /// public readonly static int APP2_MARKER = 0xE2; /// /// APP3 marker /// public readonly static int APP3_MARKER = 0xE3; /// /// APP4 marker /// public readonly static int APP4_MARKER = 0xE4; /// /// APP5 marker /// public readonly static int APP5_MARKER = 0xE5; /// /// APP6 marker /// public readonly static int APP6_MARKER = 0xE6; /// /// APP7 marker /// public readonly static int APP7_MARKER = 0xE7; /// /// APP8 marker /// public readonly static int APP8_MARKER = 0xE8; /// /// APP9 marker /// public readonly static int APP9_MARKER = 0xE9; /// /// APPA marker /// public readonly static int APPA_MARKER = 0xEA; /// /// APPB marker /// public readonly static int APPB_MARKER = 0xEB; /// /// APPC marker /// public readonly static int APPC_MARKER = 0xEC; /// /// APPD marker /// public readonly static int APPD_MARKER = 0xED; /// /// APPE marker - Adobe info /// public readonly static int APPE_MARKER = 0xEE; /// /// APPF marker /// public readonly static int APPF_MARKER = 0xEF; /// /// Adobe marker indicates presence/need for Adobe marker. /// public readonly static int COMMENT_MARKER = 0XFE; /// /// Get the image width /// /// the width of the image data in pixels. public abstract int GetWidth(); /// /// Get the image height /// /// The height of the image data in pixels. public abstract int GetHeight(); /// /// Return the Horizontal subsampling factor for requested /// Component. The Subsample factor is the number of input pixels /// that contribute to each output pixel. This is distinct from /// the way the JPEG to each output pixel. This is distinct from /// the way the JPEG standard defines this quantity, because /// fractional subsampling factors are not allowed, and it was felt /// /// The component of the encoded image to return the subsampling factor for. /// The subsample factor. public abstract int GetHorizontalSubsampling(int component); /// /// Return the Vertical subsampling factor for requested Component. /// The Subsample factor is the number of input pixels that contribute to each output pixel. /// This is distinct from the way the JPEG to each output pixel. /// This is distinct from the way the JPEG standard defines this quantity, because /// fractional subsampling factors are not allowed, and it was felt /// /// The component of the encoded image to return the subsampling factor for. /// The subsample factor. public abstract int GetVerticalSubsampling(int component); /// /// Returns the coefficient quantization tables or NULL if not defined. /// tableNum must range in value from 0 - 3. /// /// the index of the table to be returned. /// Quantization table stored at index tableNum. public abstract JPEGQTable GetQTable(int tableNum ); /// /// Returns the Quantization table for the requested component. /// /// the image component of interest. /// Quantization table associated with component public abstract JPEGQTable GetQTableForComponent(int component); /// /// Returns the DC Huffman coding table requested or null if not defined /// /// the index of the table to be returned. /// Huffman table stored at index tableNum. public abstract JPEGHuffmanTable GetDCHuffmanTable( int tableNum ); /// /// Returns the DC Huffman coding table for the requested component. /// /// the image component of interest. /// Huffman table associated with component public abstract JPEGHuffmanTable GetDCHuffmanTableForComponent(int component); /// /// Returns the AC Huffman coding table requested or null if not defined /// /// the index of the table to be returned. /// Huffman table stored at index tableNum. public abstract JPEGHuffmanTable GetACHuffmanTable( int tableNum ); /// /// Returns the AC Huffman coding table for the requested component. /// /// the image component of interest. /// Huffman table associated with component public abstract JPEGHuffmanTable GetACHuffmanTableForComponent(int component); /// /// Get the number of the DC Huffman table that will be used for a particular component. /// /// The Component of interest. /// The table number of the DC Huffman table for component. public abstract int GetDCHuffmanComponentMapping(int component); /// /// Get the number of the AC Huffman table that will be used for a particular component. /// /// The Component of interest. /// The table number of the AC Huffman table for component. public abstract int GetACHuffmanComponentMapping(int component); /// /// Get the number of the quantization table that will be used for a particular component. /// /// The Component of interest. /// The table number of the Quantization table for component. public abstract int GetQTableComponentMapping(int component); /// /// Returns true if the image information in the ParamBlock is currently valid. /// This indicates if image data was read from the stream for decoding and weather /// image data should be written when encoding. /// /// true if the image information in the ParamBlock is currently valid. public abstract bool IsImageInfoValid(); /// /// Returns true if the tables in the ParamBlock are currently valid. /// This indicates that tables were read from the stream for decoding. /// When encoding this indicates wether tables should be written to the stream. /// /// true if the tables in the ParamBlock are currently valid. public abstract bool IsTableInfoValid(); /// /// Returns true if at least one instance of the marker is present in the Parameter object. /// For encoding returns true if there is at least one instance of the marker to be written. /// /// /// The marker of interest. public abstract bool GetMarker(int marker); /// /// Returns a 'byte[][]' associated with the requested marker in the parameter object. /// Each entry in the 'byte[][]' is the data associated with one instance of /// the marker (each marker can theoretically appear any number of times in a stream). /// /// The marker of interest. /// The 'byte[][]' for this marker or null if none available. public abstract byte[][] GetMarkerData(int marker); /// /// Returns the JPEG Encoded color id. This is generally speaking only used /// if you are decoding into Rasters. Note that when decoding into a Raster no /// color conversion is performed. /// /// The value of the JPEG encoded data's color id. public abstract int GetEncodedColorID(); /// /// Returns the number of components for the current encoding COLOR_ID. /// /// the number of Components public abstract int GetNumComponents(); /// /// Get the MCUs per restart marker. /// /// The number of MCUs between restart markers. public abstract int GetRestartInterval(); /// /// Get the code for pixel size units This value is copied from the APP0 marker. /// It isn't used by the JPEG codec. If the APP0 marker wasn't present then you /// can not rely on this value. /// /// Value indicating the density unit one of the DENSITY_UNIT_* constants. public abstract int GetDensityUnit(); /// /// Get the horizontal pixel density This value is copied from the APP0 marker. /// It isn't used by the JPEG code. If the APP0 marker wasn't present then /// you can not rely on this value. /// /// The horizontal pixel density, in units described by public abstract int GetXDensity(); /// /// Get the vertical pixel density This value is copied into the APP0 marker. /// It isn't used by the JPEG code. If the APP0 marker wasn't present then /// you can not rely on this value. /// /// The verticle pixel density, in units described by public abstract int getYDensity(); } }