我正在使用 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 都是黑色)。知道为什么要这样做吗?
谢谢!大卫