001    /*
002     *    GeoAPI - Java interfaces for OGC/ISO standards
003     *    http://www.geoapi.org
004     *
005     *    Copyright (C) 2004-2012 Open Geospatial Consortium, Inc.
006     *    All Rights Reserved. http://www.opengeospatial.org/ogc/legal
007     *
008     *    Permission to use, copy, and modify this software and its documentation, with
009     *    or without modification, for any purpose and without fee or royalty is hereby
010     *    granted, provided that you include the following on ALL copies of the software
011     *    and documentation or portions thereof, including modifications, that you make:
012     *
013     *    1. The full text of this NOTICE in a location viewable to users of the
014     *       redistributed or derivative work.
015     *    2. Notice of any changes or modifications to the OGC files, including the
016     *       date changes were made.
017     *
018     *    THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
019     *    NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
020     *    TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
021     *    THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
022     *    PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
023     *
024     *    COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
025     *    CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
026     *
027     *    The name and trademarks of copyright holders may NOT be used in advertising or
028     *    publicity pertaining to the software without specific, written prior permission.
029     *    Title to copyright in this software and any associated documentation will at all
030     *    times remain with copyright holders.
031     */
032    package org.opengis.coverage.grid;
033    
034    import org.opengis.coverage.SampleDimensionType;
035    import org.opengis.annotation.UML;
036    
037    import static org.opengis.annotation.Obligation.*;
038    import static org.opengis.annotation.Specification.*;
039    
040    
041    /**
042     * Describes the packing of data values within grid coverages.
043     * It includes the packing scheme of data values with less then 8 bits per value
044     * within a byte, byte packing (Little Endian / Big Endian) for values with more
045     * than 8 bits and the packing of the values within the dimensions.
046     *
047     * <P>&nbsp;</P>
048     * <TABLE WIDTH="80%" ALIGN="center" CELLPADDING="18" BORDER="4" BGCOLOR="#FFE0B0">
049     *   <TR><TD>
050     *     <P align="justify"><STRONG>WARNING: THIS CLASS WILL CHANGE.</STRONG> Current API is derived from OGC
051     *     <A HREF="http://www.opengis.org/docs/01-004.pdf">Grid Coverages Implementation specification 1.0</A>.
052     *     We plan to replace it by new interfaces derived from ISO 19123 (<CITE>Schema for coverage geometry
053     *     and functions</CITE>). Current interfaces should be considered as legacy and are included in this
054     *     distribution only because they were part of GeoAPI 1.0 release. We will try to preserve as much
055     *     compatibility as possible, but no migration plan has been determined yet.</P>
056     *   </TD></TR>
057     * </TABLE>
058     *
059     * @version <A HREF="http://www.opengis.org/docs/01-004.pdf">Grid Coverage specification 1.0</A>
060     * @author  Martin Desruisseaux (IRD)
061     * @since   GeoAPI 1.0
062     *
063     * @deprecated In favor of migrating to ISO 19123 definition for Coverage.
064     */
065    @Deprecated
066    @UML(identifier="GC_GridPacking", specification=OGC_01004)
067    public interface GridPacking {
068        /**
069         * Order of bytes packed in values for sample dimensions with greater than 8 bits.
070         */
071        @UML(identifier="byteInValuePacking", obligation=MANDATORY, specification=OGC_01004)
072        ByteInValuePacking getByteInValuePacking();
073    
074        /**
075         * Order of values packed in a byte for sample dimensions with less than 8 bits.
076         * This include
077         * {@link SampleDimensionType#UNSIGNED_1BIT UNSIGNED_1BIT},
078         * {@link SampleDimensionType#UNSIGNED_2BITS UNSIGNED_2BITS} and
079         * {@link SampleDimensionType#UNSIGNED_4BITS UNSIGNED_4BITS} data types.
080         */
081        @UML(identifier="valueInBytePacking", obligation=MANDATORY, specification=OGC_01004)
082        ValueInBytePacking getValueInBytePacking();
083    
084        /**
085         * Gives the ordinate index for the band.
086         * This index indicates how to form a band-specific coordinate from a grid coordinate
087         * and a sample dimension number. This indicates the order in which the grid values
088         * are stored in streamed data. This packing order is used when grid values are
089         * retrieved using the {@code getPackedDataBlock} or set using
090         * {@code setPackedDataBlock} operations on {@link GridCoverage}.
091         *
092         *  bandPacking of
093         *  <UL>
094         *    <li>0 : the full band-specific coordinate is (b, n1, n2...)</li>
095         *    <li>1 : the full band-specific coordinate is (n1, b, n2...)</li>
096         *    <li>2 : the full band-specific coordinate is (n1, n2, b...)</li>
097         *  </UL>
098         *  Where
099         *  <UL>
100         *    <li>b is band</li>
101         *    <li>n1 is dimension 1</li>
102         *    <li>n2 is dimension 2</li>
103         *  </UL>
104         *  For 2 dimensional grids, band packing of 0 is referred to as band sequential,
105         *  1 line interleaved and 2 pixel interleaved.
106         *
107         *
108         * @see java.awt.image.BandedSampleModel
109         * @see java.awt.image.PixelInterleavedSampleModel
110         */
111        @UML(identifier="bandPacking", obligation=MANDATORY, specification=OGC_01004)
112        int getBandPacking();
113    }