Revision 9523 branches/piloto3d/libraries/libCq CMS for java.old/src/org/cresques/filter/enhancement/ContrastImageFilter.java
ContrastImageFilter.java | ||
---|---|---|
22 | 22 |
import java.awt.Image; |
23 | 23 |
import java.awt.image.BufferedImage; |
24 | 24 |
|
25 |
import org.cresques.filter.RasterBuf; |
|
26 | 25 |
import org.cresques.filter.RasterFilter; |
27 | 26 |
import org.cresques.filter.RasterFilterStack; |
27 |
import org.cresques.io.data.RasterBuf; |
|
28 | 28 |
|
29 | 29 |
/** |
30 | 30 |
* Filtro de contraste para im?genes raster. Toma como entrada la imagen |
... | ... | |
52 | 52 |
super.pre(); |
53 | 53 |
} |
54 | 54 |
|
55 |
public void process(int x, int y) { |
|
56 |
int px = ((BufferedImage) image).getRGB(x, y); |
|
57 |
int px3[] = {(px & 0xff000000) >> 24, |
|
58 |
(px & 0x00ff0000) >> 16, |
|
59 |
(px & 0x0000ff00) >> 8, |
|
60 |
(px & 0x000000ff)}; |
|
61 |
|
|
55 |
/** |
|
56 |
* Algoritmo de contraste |
|
57 |
* @param px3 valores ARGB |
|
58 |
* @return valores ARGB con el algoritmo aplicado |
|
59 |
*/ |
|
60 |
private int[] calcContrast(int[] px3){ |
|
62 | 61 |
for (int i = 1 ; i < 4 ; i++){ |
63 |
//************ALGORITMO DE CONTRASTE************* |
|
64 | 62 |
if(incrContraste >= 0){ |
65 | 63 |
if (px3[i] < 127){ |
66 | 64 |
diferencia = 127 - px3[i]; |
67 |
result = px3[i] - (int)((diferencia * 5) * (incrContraste*0.1)/25);
|
|
65 |
result = px3[i] - (int)((diferencia * 5) * (incrContraste*0.1) / 25);
|
|
68 | 66 |
if(result < 0) result = 0; |
69 | 67 |
} |
70 | 68 |
if (px3[i] > 127){ |
71 | 69 |
diferencia = px3[i] - 127; |
72 |
result = px3[i] + (int)((diferencia * 5) * (incrContraste*0.1)/25);
|
|
70 |
result = px3[i] + (int)((diferencia * 5) * (incrContraste * 0.1) / 25);
|
|
73 | 71 |
if(result > 255) result = 255; |
74 | 72 |
} |
75 |
} |
|
76 |
|
|
77 |
if(incrContraste < 0){ |
|
73 |
}else{ //incrContraste < 0 |
|
78 | 74 |
if(px3[i] < 127){ |
79 | 75 |
diferencia = 127 - px3[i]; |
80 |
result = px3[i] + ((int)(diferencia * 1) * (int)(-incrContraste * 0.1)/25);
|
|
76 |
result = px3[i] + ((int)diferencia * (int)(-incrContraste * 0.1) / 25);
|
|
81 | 77 |
if(result > 127) result = 127; |
82 | 78 |
if(px3[i] == 0 || px3[i] == 1) |
83 | 79 |
if(incrContraste > -255) |
... | ... | |
85 | 81 |
} |
86 | 82 |
if(px3[i] > 127){ |
87 | 83 |
diferencia = px3[i] - 127; |
88 |
result = px3[i] - ((int)(diferencia * 1) * (int)(-incrContraste * 0.1)/25);
|
|
84 |
result = px3[i] - ((int)diferencia * (int)(-incrContraste * 0.1) / 25);
|
|
89 | 85 |
if (result < 127) result = 127; |
90 | 86 |
if(px3[i] == 255 || px3[i] == 254) |
91 | 87 |
if(incrContraste > -255) |
... | ... | |
94 | 90 |
} |
95 | 91 |
px3[i] = result; |
96 | 92 |
} |
93 |
return px3; |
|
94 |
} |
|
95 |
|
|
96 |
public void process(int col, int line) { |
|
97 |
int px = ((BufferedImage) image).getRGB(col, line); |
|
98 |
int px3[] = {(px & 0xff000000) >> 24, |
|
99 |
(px & 0x00ff0000) >> 16, |
|
100 |
(px & 0x0000ff00) >> 8, |
|
101 |
(px & 0x000000ff)}; |
|
97 | 102 |
|
98 |
((BufferedImage) this.image).setRGB(x, y, ((px3[0] << 24) & 0xff000000) | |
|
103 |
px3 = calcContrast(px3); |
|
104 |
|
|
105 |
((BufferedImage) this.image).setRGB(col, line, ((px3[0] << 24) & 0xff000000) | |
|
99 | 106 |
((px3[1] << 16) & 0x00ff0000) | |
100 | 107 |
((px3[2] << 8) & 0x0000ff00) | |
101 | 108 |
(px3[3] & 0x000000ff)); |
102 | 109 |
} |
103 | 110 |
|
111 |
public void processSuperSampling(int col, int line) { |
|
112 |
int px = ((BufferedImage) image).getRGB(col, line); |
|
113 |
int px3[] = {(px & 0xff000000) >> 24, |
|
114 |
(px & 0x00ff0000) >> 16, |
|
115 |
(px & 0x0000ff00) >> 8, |
|
116 |
(px & 0x000000ff)}; |
|
117 |
|
|
118 |
px3 = calcContrast(px3); |
|
119 |
|
|
120 |
for(int j = col; j < image.getWidth(null) && j < (col + stepX[contX + 1]); j++) |
|
121 |
for(int i = line; i < image.getHeight(null) && i < (line + stepY[contY + 1]); i++) |
|
122 |
((BufferedImage) image).setRGB(j, i, ((px3[0] << 24) & 0xff000000) | |
|
123 |
((px3[1] << 16) & 0x00ff0000) | |
|
124 |
((px3[2] << 8) & 0x0000ff00) | |
|
125 |
(px3[3] & 0x000000ff)); |
|
126 |
} |
|
127 |
|
|
104 | 128 |
public int getInRasterDataType() { |
105 | 129 |
return RasterBuf.TYPE_IMAGE; |
106 | 130 |
} |
Also available in: Unified diff