comparison src/samer/tools/ColorRamp.java @ 0:bf79fb79ee13

Initial Mercurial check in.
author samer
date Tue, 17 Jan 2012 17:50:20 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:bf79fb79ee13
1 /*
2 * Copyright (c) 2000, Samer Abdallah, King's College London.
3 * All rights reserved.
4 *
5 * This software is provided AS iS and WITHOUT ANY WARRANTY;
6 * without even the implied warranty of MERCHANTABILITY or
7 * FITNESS FOR A PARTICULAR PURPOSE.
8 */
9
10 package samer.tools;
11 import java.awt.Color;
12 import java.awt.image.ColorModel;
13 import java.awt.image.IndexColorModel;
14
15 /**
16 Objects of these class could be used directly,
17 but main purpose is to help construct an IndexColorModel
18 for an image
19 */
20
21 public class ColorRamp implements java.io.Serializable
22 {
23 private byte r[], g[], b[], a[];
24 private int size;
25 private int lasti;
26 private Color lastc;
27
28
29 public ColorRamp(int sz)
30 {
31 size=sz;
32 r=new byte[size];
33 g=new byte[size];
34 b=new byte[size];
35 a=new byte[size];
36 }
37
38 public Color getColor(int i) {
39 int ir = ((int)r[i] & 0xff);
40 int ig = ((int)g[i] & 0xff);
41 int ib = ((int)b[i] & 0xff);
42 return new Color(ir,ig,ib);
43 }
44
45 public Color[] getColorArray() {
46 Color[] clut=new Color[size];
47 for (int i=0; i<size; i++) clut[i]=getColor(i);
48 return clut;
49 }
50
51 public int getSize() { return size; }
52 public IndexColorModel getColorModel() {
53 return new IndexColorModel(8,size,r,g,b);
54 }
55
56 public void set( int i, Color c) { set(i,c,1); }
57 public void set( int i, Color c, double alpha)
58 {
59 r[i]=(byte)c.getRed();
60 g[i]=(byte)c.getGreen();
61 b[i]=(byte)c.getBlue();
62 a[i]=clip(256.0*alpha);
63 lasti=i; lastc=c;
64 }
65
66 public void gradientTo( int i, Color c) {
67 gradient(lasti,lastc,1.0,i,c,1.0);
68 }
69
70 public void gradient( Color c1, Color c2) {
71 gradient(0,c1,1.0,size-1,c2,1.0);
72 }
73
74 public void gradient( Color c1, double a1, Color c2, double a2) {
75 gradient(0,c1,a1,size-1,c2,a2);
76 }
77
78 public void gradient( int i1, Color c1, int i2, Color c2) {
79 gradient(i1,c1,1,i2,c2,1);
80 }
81
82 public void gradient( int i1, Color c1, double a1, int i2, Color c2, double a2)
83 {
84 double _a, _r, _g, _b;
85 double da, dr, dg, db;
86 double di;
87 int i;
88
89 di = i2-i1-1;
90
91 _a = 256*a1; da = (256*a2-_a)/di;
92 _r = c1.getRed(); dr = (c2.getRed()-_r)/di;
93 _g = c1.getGreen(); dg = (c2.getGreen()-_g)/di;
94 _b = c1.getBlue(); db = (c2.getBlue()-_b)/di;
95
96 for (i=i1; i<=i2; i++) {
97 a[i] = clip(_a);
98 r[i] = clip(_r);
99 g[i] = clip(_g);
100 b[i] = clip(_b);
101 _a+=da; _r+=dr; _g+=dg; _b+=db;
102 }
103
104 lasti=i2; lastc=c2;
105 }
106
107 private static byte clip(double t)
108 {
109 if (t<0) return 0;
110 else if (t>=256.0) return (byte)255;
111 else return (byte)t;
112 }
113 }
114