Mercurial > hg > jslab
view src/samer/tools/ColorRamp.java @ 8:5e3cbbf173aa tip
Reorganise some more
author | samer |
---|---|
date | Fri, 05 Apr 2019 22:41:58 +0100 |
parents | bf79fb79ee13 |
children |
line wrap: on
line source
/* * Copyright (c) 2000, Samer Abdallah, King's College London. * All rights reserved. * * This software is provided AS iS and WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. */ package samer.tools; import java.awt.Color; import java.awt.image.ColorModel; import java.awt.image.IndexColorModel; /** Objects of these class could be used directly, but main purpose is to help construct an IndexColorModel for an image */ public class ColorRamp implements java.io.Serializable { private byte r[], g[], b[], a[]; private int size; private int lasti; private Color lastc; public ColorRamp(int sz) { size=sz; r=new byte[size]; g=new byte[size]; b=new byte[size]; a=new byte[size]; } public Color getColor(int i) { int ir = ((int)r[i] & 0xff); int ig = ((int)g[i] & 0xff); int ib = ((int)b[i] & 0xff); return new Color(ir,ig,ib); } public Color[] getColorArray() { Color[] clut=new Color[size]; for (int i=0; i<size; i++) clut[i]=getColor(i); return clut; } public int getSize() { return size; } public IndexColorModel getColorModel() { return new IndexColorModel(8,size,r,g,b); } public void set( int i, Color c) { set(i,c,1); } public void set( int i, Color c, double alpha) { r[i]=(byte)c.getRed(); g[i]=(byte)c.getGreen(); b[i]=(byte)c.getBlue(); a[i]=clip(256.0*alpha); lasti=i; lastc=c; } public void gradientTo( int i, Color c) { gradient(lasti,lastc,1.0,i,c,1.0); } public void gradient( Color c1, Color c2) { gradient(0,c1,1.0,size-1,c2,1.0); } public void gradient( Color c1, double a1, Color c2, double a2) { gradient(0,c1,a1,size-1,c2,a2); } public void gradient( int i1, Color c1, int i2, Color c2) { gradient(i1,c1,1,i2,c2,1); } public void gradient( int i1, Color c1, double a1, int i2, Color c2, double a2) { double _a, _r, _g, _b; double da, dr, dg, db; double di; int i; di = i2-i1-1; _a = 256*a1; da = (256*a2-_a)/di; _r = c1.getRed(); dr = (c2.getRed()-_r)/di; _g = c1.getGreen(); dg = (c2.getGreen()-_g)/di; _b = c1.getBlue(); db = (c2.getBlue()-_b)/di; for (i=i1; i<=i2; i++) { a[i] = clip(_a); r[i] = clip(_r); g[i] = clip(_g); b[i] = clip(_b); _a+=da; _r+=dr; _g+=dg; _b+=db; } lasti=i2; lastc=c2; } private static byte clip(double t) { if (t<0) return 0; else if (t>=256.0) return (byte)255; else return (byte)t; } }