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' は double[] 配列で、サイズは 1 です。配列の値は、カラー パレットのインデックスです。
新しい IndexColorModel を作成してパレットを変更する方法を見つけましたが、コード化する必要があるロジックは正気ではありません。(たとえば、パレットに含めることができる色の数は、多くの要因によって異なります。さらに、新しい色を追加するためにパレットから色を削除する必要がある場合は、どの色を削除するのが最適かを判断するロジックが必要になります。次に、以前にその色を参照していたすべてのピクセルを変更します -- うわー、それは大量のコードです!)
それで、私の質問は、どのようにパレットに色を追加するのですか? 既存のライブラリはありますか? または、ioimage から何かを使用する必要がありますか? (正直に言うと、jai がどこで「終了」し、ioimage が「開始」するのか少し混乱しています。)
また、副次的な質問ですが、何らかの理由で、パレットに約 10 色しかないテスト画像が 256 色として読み込まれます。次にjaiで画像を保存すると、256色すべてが保存されます(11から255はすべて黒です)。なぜこれをやっているのですか?
ありがとう!デビッド