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 * A colormap which interpolates linearly between two colors. 038 */ 039public class LinearColormap implements Colormap { 040 041 private int color1; 042 private int color2; 043 044 /** 045 * Construct a color map with a grayscale ramp from black to white. 046 */ 047 public LinearColormap() { 048 this(0xff000000, 0xffffffff); 049 } 050 051 /** 052 * Construct a linear color map. 053 * @param color1 the color corresponding to value 0 in the colormap 054 * @param color2 the color corresponding to value 1 in the colormap 055 */ 056 public LinearColormap(int color1, int color2) { 057 this.color1 = color1; 058 this.color2 = color2; 059 } 060 061 /** 062 * Set the first color. 063 * @param color1 the color corresponding to value 0 in the colormap 064 */ 065 public void setColor1(int color1) { 066 this.color1 = color1; 067 } 068 069 /** 070 * Get the first color. 071 * @return the color corresponding to value 0 in the colormap 072 */ 073 public int getColor1() { 074 return color1; 075 } 076 077 /** 078 * Set the second color. 079 * @param color2 the color corresponding to value 1 in the colormap 080 */ 081 public void setColor2(int color2) { 082 this.color2 = color2; 083 } 084 085 /** 086 * Get the second color. 087 * @return the color corresponding to value 1 in the colormap 088 */ 089 public int getColor2() { 090 return color2; 091 } 092 093 /** 094 * Convert a value in the range 0..1 to an RGB color. 095 * @param v a value in the range 0..1 096 * @return an RGB color 097 */ 098 public int getColor(float v) { 099 return ImageMath.mixColors(ImageMath.clamp(v, 0, 1.0f), color1, color2); 100 } 101 102}