Revision 8798
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.legend/org.gvsig.raster.lib.legend.impl/src/main/java/org/gvsig/raster/lib/legend/impl/DefaultColorManager.java | ||
---|---|---|
443 | 443 |
|
444 | 444 |
public double[] RGBtoCMYK(int red, int green, int blue, double kScale) { |
445 | 445 |
double[] cmyk = new double[4]; |
446 |
double c = 1D - (red / 255D);
|
|
447 |
double m = 1D - (green / 255D);
|
|
448 |
double y = 1D - (blue / 255D);
|
|
449 |
cmyk[3] = 1D; |
|
446 |
double r = red / 255D;
|
|
447 |
double g = green / 255D;
|
|
448 |
double b = blue / 255D;
|
|
449 |
cmyk[3] = 1D - Math.max(r, Math.max(g, b));
|
|
450 | 450 |
|
451 |
if(c < cmyk[3]) |
|
452 |
cmyk[3] = c; |
|
453 |
if(m < cmyk[3]) |
|
454 |
cmyk[3] = m; |
|
455 |
if(y < cmyk[3]) |
|
456 |
cmyk[3] = y; |
|
457 |
|
|
458 |
cmyk[3] *= kScale; |
|
459 |
|
|
460 |
if(cmyk[3] < 1.0) { |
|
461 |
cmyk[0] = ((double)(c - cmyk[3]) / (double)(1D - cmyk[3])); |
|
462 |
cmyk[1] = ((double)(m - cmyk[3]) / (double)(1D - cmyk[3])); |
|
463 |
cmyk[2] = ((double)(y - cmyk[3]) / (double)(1D - cmyk[3])); |
|
451 |
cmyk[0] = 0; |
|
452 |
cmyk[1] = 0; |
|
453 |
cmyk[2] = 0; |
|
454 |
if(cmyk[3]!=1){ |
|
455 |
cmyk[0] = ((double) (1 - r - cmyk[3]) / (double) (1D - cmyk[3])) * kScale; |
|
456 |
cmyk[1] = ((double) (1 - g - cmyk[3]) / (double) (1D - cmyk[3])) * kScale; |
|
457 |
cmyk[2] = ((double) (1 - b - cmyk[3]) / (double) (1D - cmyk[3])) * kScale; |
|
464 | 458 |
} |
459 |
cmyk[3] *= kScale; |
|
465 | 460 |
return cmyk; |
466 | 461 |
} |
467 | 462 |
|
468 | 463 |
public double[] CMYKtoRGB(double cyan, double magenta, double yellow, double key) { |
469 | 464 |
double[] rgb = new double[3]; |
470 |
double c = 1, m = 1, y = 1; |
|
471 | 465 |
|
472 |
if (key < 1D) { |
|
473 |
c = cyan * (1D - key) + key; |
|
474 |
m = magenta * (1D - key) + key; |
|
475 |
y = yellow * (1D - key) + key; |
|
476 |
} |
|
466 |
rgb[0] = (1D - cyan)*(1-key); |
|
467 |
rgb[1] = (1D - magenta)*(1-key); |
|
468 |
rgb[2] = (1D - yellow)*(1-key); |
|
477 | 469 |
|
478 |
rgb[0] = 1D - c; |
|
479 |
rgb[1] = 1D - m; |
|
480 |
rgb[2] = 1D - y; |
|
481 | 470 |
return rgb; |
482 | 471 |
} |
483 | 472 |
|
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.legend/org.gvsig.raster.lib.legend.impl/src/main/java/org/gvsig/raster/lib/legend/impl/operations/cmyktorgb/CMYKToRGBOperation.java | ||
---|---|---|
68 | 68 |
|
69 | 69 |
try { |
70 | 70 |
if (!colorInterpretation.isCMYK()) { |
71 |
throw new UnsupportedOperationException("The color interpretation of input buffer isn't HSL");
|
|
71 |
throw new UnsupportedOperationException("The color interpretation of input buffer isn't CMYK");
|
|
72 | 72 |
} |
73 | 73 |
|
74 | 74 |
int[] inputBandTypes = buffer.getBandTypes(); |
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.legend/org.gvsig.raster.lib.legend.impl/src/main/java/org/gvsig/raster/lib/legend/impl/operations/rgbtocmyk/RGBToCMYKOperation.java | ||
---|---|---|
26 | 26 |
import java.util.Iterator; |
27 | 27 |
import java.util.List; |
28 | 28 |
|
29 |
import org.slf4j.Logger; |
|
30 |
import org.slf4j.LoggerFactory; |
|
31 |
|
|
29 | 32 |
import org.gvsig.fmap.geom.exception.CreateEnvelopeException; |
30 | 33 |
import org.gvsig.raster.lib.buffer.api.Band; |
31 | 34 |
import org.gvsig.raster.lib.buffer.api.BufferLocator; |
... | ... | |
35 | 38 |
import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException; |
36 | 39 |
import org.gvsig.raster.lib.buffer.api.operations.OperationFactory; |
37 | 40 |
import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException; |
38 |
import org.gvsig.raster.lib.buffer.spi.operations.AbstractOperation; |
|
39 | 41 |
import org.gvsig.raster.lib.legend.api.RasterLegendLocator; |
40 | 42 |
import org.gvsig.raster.lib.legend.api.RasterLegendManager; |
41 | 43 |
import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation; |
... | ... | |
51 | 53 |
*/ |
52 | 54 |
public class RGBToCMYKOperation extends AbstractColoredOperation { |
53 | 55 |
|
56 |
private static final Logger LOG = LoggerFactory.getLogger(RGBToCMYKOperation.class); |
|
57 |
|
|
54 | 58 |
/** |
55 | 59 |
* @param factory |
56 | 60 |
* |
... | ... | |
230 | 234 |
double[] convertedValues = colorManager.RGBtoCMYK(0xFF & inputByteRows[0][i], 0xFF & inputByteRows[1][i], 0xFF & inputByteRows[2][i], 255); |
231 | 235 |
|
232 | 236 |
for (int band = 0; band < outputRows.size(); band++) { |
233 |
((byte[])(outputRows.get(band)))[i] = (new Double(convertedValues[band]*255)).byteValue();
|
|
237 |
((byte[])(outputRows.get(band)))[i] = new Double(convertedValues[band]).byteValue();
|
|
234 | 238 |
} |
235 | 239 |
} |
236 | 240 |
} |
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.legend/org.gvsig.raster.lib.legend.impl/src/test/java/org/gvsig/raster/lib/legend/impl/DefaultColorConversionTest.java | ||
---|---|---|
1 |
package org.gvsig.raster.lib.legend.impl; |
|
2 |
|
|
3 |
import org.gvsig.raster.lib.legend.api.RasterLegendLocator; |
|
4 |
import org.gvsig.raster.lib.legend.api.RasterLegendManager; |
|
5 |
import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation; |
|
6 |
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase; |
|
7 |
|
|
8 |
/** |
|
9 |
* @author <a href="mailto:fdiaz@disid.com">Francisco D?az</a> |
|
10 |
* |
|
11 |
*/ |
|
12 |
@SuppressWarnings("javadoc") |
|
13 |
public class DefaultColorConversionTest extends AbstractLibraryAutoInitTestCase { |
|
14 |
|
|
15 |
private ColorManager colorManager; |
|
16 |
|
|
17 |
@Override |
|
18 |
protected void doSetUp() throws Exception { |
|
19 |
RasterLegendManager rasterLegendManager = RasterLegendLocator.getRasterLegendManager(); |
|
20 |
colorManager = ((RasterLegendManagerServices)RasterLegendLocator.getRasterLegendManager()).getColorManager(); |
|
21 |
} |
|
22 |
|
|
23 |
public void testSetColorInterpValue() { |
|
24 |
double[] convertedValues = colorManager.RGBtoCMYK(0xFF & 127, 0xFF & 127, 0xFF & 0, 100); |
|
25 |
assertEquals((new Double(convertedValues[0])).byteValue(),0); |
|
26 |
assertEquals((new Double(convertedValues[1])).byteValue(),0); |
|
27 |
assertEquals((new Double(convertedValues[2])).byteValue(),100); |
|
28 |
assertEquals((new Double(convertedValues[3])).byteValue(),50); |
|
29 |
|
|
30 |
convertedValues = colorManager.RGBtoCMYK(0xFF & 0, 0xFF & 0, 0xFF & 0, 100); |
|
31 |
assertEquals((new Double(convertedValues[0])).byteValue(),0); |
|
32 |
assertEquals((new Double(convertedValues[1])).byteValue(),0); |
|
33 |
assertEquals((new Double(convertedValues[2])).byteValue(),0); |
|
34 |
assertEquals((new Double(convertedValues[3])).byteValue(),100); |
|
35 |
|
|
36 |
convertedValues = colorManager.RGBtoCMYK(0xFF & 64, 0xFF & 135, 0xFF & 192, 100); |
|
37 |
assertEquals((new Double(convertedValues[0])).byteValue(),66); |
|
38 |
assertEquals((new Double(convertedValues[1])).byteValue(),29); |
|
39 |
assertEquals((new Double(convertedValues[2])).byteValue(),0); |
|
40 |
assertEquals((new Double(convertedValues[3])).byteValue(),24); |
|
41 |
|
|
42 |
convertedValues = colorManager.RGBtoCMYK(0xFF & 255, 0xFF & 255, 0xFF & 255, 100); |
|
43 |
assertEquals((new Double(convertedValues[0])).byteValue(),0); |
|
44 |
assertEquals((new Double(convertedValues[1])).byteValue(),0); |
|
45 |
assertEquals((new Double(convertedValues[2])).byteValue(),0); |
|
46 |
assertEquals((new Double(convertedValues[3])).byteValue(),0); |
|
47 |
|
|
48 |
} |
|
49 |
|
|
50 |
} |
Also available in: Unified diff