private void preparePalettes() {
   if (oldPalette == null || newPalette == null) {
     throw new NullPointerException("Both palettes must be set.");
   }
   inversePalette = new HashMap<>();
   for (int i = 0; i < newPalette.size(); i++) {
     inversePalette.put(newPalette.get(i), i);
   }
   changedColors = ColorHelper.findChangedColors(newPalette, oldPalette);
 }
 @Override
 public int transform(int i) {
   if (oldPalette != null) {
     /// turn an oldPalette index in to a color
     if (changedColors.contains(i)) {
       i = oldPalette.get(i);
     }
   }
   // turn a color in to a current index
   if (i > newPalette.size()) {
     if (inversePalette.containsKey(i)) {
       i = inversePalette.get(i);
     }
   }
   return i;
 }
 @Override
 public void setPalettes(ColorPalette newPalette, ColorPalette oldPalette) {
   if (oldPalette == null) {
     oldPalette = new ColorPalette();
     oldPalette.makeUnmodifiable();
   }
   this.newPalette = newPalette;
   this.oldPalette = oldPalette;
   preparePalettes();
 }