Revision 9523 branches/piloto3d/libraries/libCq CMS for java.old/src/org/cresques/filter/enhancement/ContrastImageFilter.java

View differences:

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