/** @see IcyColorMap#setTypeFromData() */
  public void setTypeFromData(boolean notifyChange) {
    boolean grayColor = true;
    boolean noColor = true;
    boolean hasAlpha = false;
    IcyColorMapType cmType;

    for (int i = 0; i < MAX_INDEX; i++) {
      final short r = red.map[i];
      final short g = green.map[i];
      final short b = blue.map[i];
      final short a = alpha.map[i];

      grayColor &= (r == g) && (r == b);
      noColor &= (r == 0) && (g == 0) && (b == 0);
      hasAlpha |= (a != MAX_LEVEL);
    }

    if (noColor && hasAlpha) cmType = IcyColorMapType.ALPHA;
    else if (grayColor && !noColor) {
      // set gray map
      gray.copyFrom(red.map, 0);
      cmType = IcyColorMapType.GRAY;
    } else cmType = IcyColorMapType.RGB;

    if (notifyChange) setType(cmType);
    else type = cmType;
  }
 /**
  * Copy data from specified source colormap.
  *
  * @param copyAlpha Also copy the alpha information.
  */
 public void copyFrom(IcyColorMap srcColorMap, boolean copyAlpha) {
   beginUpdate();
   try {
     // copy colormap band
     red.copyFrom(srcColorMap.red);
     green.copyFrom(srcColorMap.green);
     blue.copyFrom(srcColorMap.blue);
     gray.copyFrom(srcColorMap.gray);
     if (copyAlpha) alpha.copyFrom(srcColorMap.alpha);
     // copy type
     setType(srcColorMap.type);
   } finally {
     endUpdate();
   }
 }
  @Override
  public boolean loadFromXML(Node node) {
    if (node == null) return false;

    beginUpdate();
    try {
      setName(XMLUtil.getElementValue(node, ID_NAME, ""));
      setEnabled(XMLUtil.getElementBooleanValue(node, ID_ENABLED, true));
      setType(IcyColorMapType.valueOf(XMLUtil.getElementValue(node, ID_TYPE, "")));

      boolean result = true;

      result = result && red.loadFromXML(XMLUtil.getElement(node, ID_RED));
      result = result && green.loadFromXML(XMLUtil.getElement(node, ID_GREEN));
      result = result && blue.loadFromXML(XMLUtil.getElement(node, ID_BLUE));
      result = result && gray.loadFromXML(XMLUtil.getElement(node, ID_GRAY));
      result = result && alpha.loadFromXML(XMLUtil.getElement(node, ID_ALPHA));

      return result;
    } finally {
      endUpdate();
    }
  }