Я использую JAI для добавления «рамки» к изображению. Например,
ParameterBlock pb = new ParameterBlock();
pb.addSource(r);
pb.add(leftPad);
pb.add(rightPad);
pb.add(topPad);
pb.add(bottomPad);
pb.add(new BorderExtenderConstant(consts));
r = JAI.create("border", pb);
Значение 'consts' выше зависит от ColorModel. При использовании ComponentColorModel каждый пиксель имеет свой собственный цвет, поэтому мне не нужно связываться с палитрой. Когда изображение имеет палитру (GIF, PNG, ...), ColorModel имеет значение IndexColorModel.
Когда используется IndexColorModel, 'consts' - это двойной массив [] размером один. Значением в массиве является индекс в цветовой палитре.
Я нашел, как изменить палитру, создав новую IndexColorModel, но логика, которую мне пришлось бы кодировать, была бы безумной! (Например, сколько цветов я могу иметь в палитре, зависит от многих факторов. Кроме того, если мне нужно удалить цвет из палитры, чтобы добавить новый, мне понадобится логика, которая определяет, какой цвет лучше всего удалить, и затем измените все пиксели, ранее ссылающиеся на этот цвет - вау, это много кода!)
Итак, мой вопрос: как добавить цвет в палитру? Есть ли существующая библиотека? Или я должен использовать что-то из ioimage? (Если честно, я немного запутался, когда jai «заканчивается» и ioimage «начинается».)
Кроме того, дополнительный вопрос, по некоторым причинам мои тестовые изображения, которые имеют только около 10 цветов в палитре, читаются как имеющие 256 цветов. Когда я затем сохраняю изображение с помощью jai, все 256 цветов сохраняются (с 11 по 255 все черные). Есть идеи, почему он это делает?
Спасибо!
David