Mercurial > hg > jslab
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 |