1 /*
2  * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 package java.awt.image;
27 
28 
29 /**
30  * This abstract class defines a lookup table object.  ByteLookupTable
31  * and ShortLookupTable are subclasses, which
32  * contain byte and short data, respectively.  A lookup table
33  * contains data arrays for one or more bands (or components) of an image
34  * (for example, separate arrays for R, G, and B),
35  * and it contains an offset which will be subtracted from the
36  * input values before indexing into the arrays.  This allows an array
37  * smaller than the native data size to be provided for a
38  * constrained input.  If there is only one array in the lookup
39  * table, it will be applied to all bands.  All arrays must be the
40  * same size.
41  *
42  * @see ByteLookupTable
43  * @see ShortLookupTable
44  * @see LookupOp
45  */
46 public abstract class LookupTable {
47 
48     /**
49      * Constants
50      */
51 
52     int  numComponents;
53     int  offset;
54     int  numEntries;
55 
56     /**
57      * Constructs a new LookupTable from the number of components and an offset
58      * into the lookup table.
59      * @param offset the offset to subtract from input values before indexing
60      *        into the data arrays for this {@code LookupTable}
61      * @param numComponents the number of data arrays in this
62      *        {@code LookupTable}
63      * @throws IllegalArgumentException if {@code offset} is less than 0
64      *         or if {@code numComponents} is less than 1
65      */
LookupTable(int offset, int numComponents)66     protected LookupTable(int offset, int numComponents) {
67         if (offset < 0) {
68             throw new
69                 IllegalArgumentException("Offset must be greater than 0");
70         }
71         if (numComponents < 1) {
72             throw new IllegalArgumentException("Number of components must "+
73                                                " be at least 1");
74         }
75         this.numComponents = numComponents;
76         this.offset = offset;
77     }
78 
79     /**
80      * Returns the number of components in the lookup table.
81      * @return the number of components in this {@code LookupTable}.
82      */
getNumComponents()83     public int getNumComponents() {
84         return numComponents;
85     }
86 
87     /**
88      * Returns the offset.
89      * @return the offset of this {@code LookupTable}.
90      */
getOffset()91     public int getOffset() {
92         return offset;
93     }
94 
95     /**
96      * Returns an {@code int} array of components for
97      * one pixel.  The {@code dest} array contains the
98      * result of the lookup and is returned.  If dest is
99      * {@code null}, a new array is allocated.  The
100      * source and destination can be equal.
101      * @param src the source array of components of one pixel
102      * @param dest the destination array of components for one pixel,
103      *        translated with this {@code LookupTable}
104      * @return an {@code int} array of components for one
105      *         pixel.
106      */
lookupPixel(int[] src, int[] dest)107     public abstract int[] lookupPixel(int[] src, int[] dest);
108 
109 }
110