Revision 8798

View differences:

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