Index: branches/org.gvsig.desktop-2018a/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegendManager.java
===================================================================
--- branches/org.gvsig.desktop-2018a/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegendManager.java	(revision 43865)
+++ branches/org.gvsig.desktop-2018a/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegendManager.java	(revision 43866)
@@ -145,6 +145,8 @@
      */
     public ColorInterpretation createColorInterpretation(String[] colorInterpretations);
 
+    public ColorInterpretation createColorInterpretation(List<String> colorInterpretations);
+
     /**
      * Creates default color interpretation using {@link ColorInterpretation}
      * constants.
Index: branches/org.gvsig.desktop-2018a/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/spi/AbstractColoredOperation.java
===================================================================
--- branches/org.gvsig.desktop-2018a/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/spi/AbstractColoredOperation.java	(revision 43865)
+++ branches/org.gvsig.desktop-2018a/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/spi/AbstractColoredOperation.java	(revision 43866)
@@ -22,7 +22,11 @@
  */
 package org.gvsig.raster.lib.legend.spi;
 
+import java.util.ArrayList;
+import java.util.List;
+import org.gvsig.raster.lib.buffer.api.NoData;
 import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
 import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
 import org.gvsig.raster.lib.buffer.spi.operations.AbstractOperation;
 import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
@@ -35,21 +39,34 @@
  */
 public abstract class AbstractColoredOperation extends AbstractOperation implements ColoredOperation {
 
-    protected ColorInterpretation colorInterpretation;
-    protected ColorInterpretation outputColorInterpretation;
+    private ColorInterpretation colorInterpretation;
+    private ColorInterpretation outputColorInterpretation;
 
 
     /**
      *
+     * @param factory
      */
-    public AbstractColoredOperation() {
-        // Nothing to do
+    public AbstractColoredOperation(OperationFactory factory) {
+        super(factory);
     }
 
+    protected ColorInterpretation getInputColorInterpretation() {
+        return this.colorInterpretation;
+    }
+    
+    protected ColorInterpretation getOutputColorInterpretation() {
+        return this.outputColorInterpretation;
+    }
+    
+    protected void setOutputColorInterpretation(ColorInterpretation theColorInterpretation) {
+        this.outputColorInterpretation = theColorInterpretation;
+    }
+    
     @Override
     public void preProcess() throws BufferOperationException {
         super.preProcess();
-        colorInterpretation = (ColorInterpretation) this.parameters.getDynValue(COLOR_INTERPRETATION_PARAM);
+        colorInterpretation = (ColorInterpretation) this.getParameters().getDynValue(COLOR_INTERPRETATION_PARAM);
     }
 
     @Override
@@ -61,5 +78,118 @@
     public void postProcess() throws BufferOperationException {
         super.postProcess();
     }
+    
+    protected boolean isProcessableBand(int band) {
+        // By default all bands are processables.
+        return true;
+    }
+    
+    /**
+     * This is a utility method that return a list of the ColorInterpretation for 
+     * the processable bands of the input buffer.
+     * 
+     * @return List of ColorInterpretation
+     */
+    protected List<String> getProcessableBandColorInterpretations() {
+        int bands = this.getInputBuffer().getBandCount();
+        List<String> colorInterpretations = new ArrayList<>();
+        for (int band = 0; band < bands; band++) {
+            if (this.isProcessableBand(band)) {
+                colorInterpretations.add(colorInterpretation.get(band));
+            }
+        }
+        if (colorInterpretation.hasAlphaBand()) {
+            colorInterpretations.add(ColorInterpretation.ALPHA_BAND);
+        }
+        return colorInterpretations;
+    }
+    
+    /**
+     * This is a utility method that return a copy of the ColorInterpretation for 
+     * the processable band of the input buffer.
+     * 
+     * @return array of ColorInterpretation
+     */
+    protected String[] getProcessableBandColorInterpretationsAsArray() {
+        List<String> l = this.getProcessableBandColorInterpretations();
+        String[] colorInterpretations = getColorInterpretationsAsArray(l);
+        return colorInterpretations;
+    }
 
+    private String[] getColorInterpretationsAsArray(List<String> theColorInterpretations) {
+        String[] colorInterpretations = theColorInterpretations.toArray(new String[theColorInterpretations.size()]);
+        return colorInterpretations;
+    }
+    
+    /**
+     * This is a utility method that return a copy of the NoData of 
+     * the processable band of the input buffer.
+     * 
+     * @return List of NoDatas
+     */
+    protected List<NoData> getProcessableBandNoDatas() {
+        int bands = this.getInputBuffer().getBandCount();
+        List<NoData> noDatas = new ArrayList<>();
+        for (int band = 0; band < bands; band++) {
+            if (this.isProcessableBand(band)) {
+                noDatas.add(this.getInputBuffer().getBandNoData()[band]);
+            }
+        }
+        return noDatas;
+    }
+    
+    /**
+     * This is a utility method that return a copy of the NoData of 
+     * the processable band of the input buffer.
+     * 
+     * @return array of NoDatas
+     */
+    protected NoData[] getProcessableBandNoDatasAsArray() {
+        List<NoData> l = this.getProcessableBandNoDatas();
+        NoData[] noDatas = this.getNoDatasAsArray(l);
+        return noDatas;
+    }
+    
+    protected NoData[] getNoDatasAsArray(List<NoData> theNoDatas) {
+        NoData[] noDatas = theNoDatas.toArray(new NoData[theNoDatas.size()]);
+        return noDatas;
+    }
+    
+    /**
+     * This is a utility method that return a copy of the types of 
+     * the processable band of the input buffer.
+     * 
+     * @return list of types
+     */
+    protected List<Integer> getProcessableBandTypes() {
+        int bands = this.getInputBuffer().getBandCount();
+        List<Integer> types = new ArrayList<>();
+        for (int band = 0; band < bands; band++) {
+            if (this.isProcessableBand(band)) {
+                types.add(this.getInputBuffer().getBandTypes()[band]);
+            }
+        }
+        return types;
+    }
+    
+    /**
+     * This is a utility method that return a copy of the types of 
+     * the processable band of the input buffer.
+     * 
+     * @return Array of types
+     */
+    protected int[] getProcessableBandTypesAsArray() {
+        int[] types = this.getTypesAsArray(this.getProcessableBandTypes());
+        return types;
+    }
+    
+    protected int[] getTypesAsArray(List<Integer> theTypes) {
+        int[] types = new int[theTypes.size()];
+        int n = 0;
+        for (Integer type : theTypes) {
+            types[n++] = type ;
+        }
+        return types;
+    }
+        
 }
