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(); }