001/**
002 *
003 * Copyright (c) 2014, the Railo Company Ltd. All rights reserved.
004 *
005 * This library is free software; you can redistribute it and/or
006 * modify it under the terms of the GNU Lesser General Public
007 * License as published by the Free Software Foundation; either 
008 * version 2.1 of the License, or (at your option) any later version.
009 * 
010 * This library is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013 * Lesser General Public License for more details.
014 * 
015 * You should have received a copy of the GNU Lesser General Public 
016 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
017 * 
018 **/
019/*
020*
021
022Licensed under the Apache License, Version 2.0 (the "License");
023you may not use this file except in compliance with the License.
024You may obtain a copy of the License at
025
026   http://www.apache.org/licenses/LICENSE-2.0
027
028Unless required by applicable law or agreed to in writing, software
029distributed under the License is distributed on an "AS IS" BASIS,
030WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
031See the License for the specific language governing permissions and
032limitations under the License.
033*/
034
035package lucee.runtime.img.filter;
036/**
037 * The interface for an image quantizer. The addColor method is called (repeatedly
038 * if necessary) with all the image pixels. A color table can then be returned by 
039 * calling the buildColorTable method.
040 */
041public interface Quantizer {
042        /**
043         * Initialize the quantizer. This should be called before adding any pixels.
044         * @param numColors the number of colors we're quantizing to.
045         */
046        public void setup(int numColors);
047        
048        /**
049         * Add pixels to the quantizer.
050         * @param pixels the array of ARGB pixels
051         * @param offset the offset into the array
052         * @param count the count of pixels
053         */
054        public void addPixels(int[] pixels, int offset, int count);
055        
056        /**
057         * Build a color table from the added pixels.
058         * @return an array of ARGB pixels representing a color table
059         */
060        public int[] buildColorTable();
061        
062        /**
063         * Using the previously-built color table, return the index into that table for a pixel.
064         * This is guaranteed to return a valid index - returning the index of a color closer
065         * to that requested if necessary. 
066         * @param rgb the pixel to find
067         * @return the pixel's index in the color table
068         */
069        public int getIndexForColor(int rgb);
070}