java使用JAI时,如何向调色板添加新颜色?
我正在使用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”是一个大小为1的双[]数组。数组中的值是调色板中的索引
我发现了如何通过创建一个新的IndexColorModel来修改调色板,但是我必须编写的逻辑将是疯狂的!(例如,调色板中可以有多少种颜色取决于许多因素。此外,如果我需要从调色板中删除一种颜色以添加新颜色,我需要确定哪种颜色最适合删除,然后修改以前引用该颜色的所有像素的逻辑——哇,代码太多了!)
所以,我的问题是,如何为调色板添加颜色?有现有的图书馆吗?或者我应该使用ioimage的东西?(老实说,我有点困惑jai“结束”和ioimage“开始”的位置。)
另外,还有一个小问题,出于某种原因,我的测试图像在调色板中只有大约10种颜色,但被读取为有256种颜色。当我用jai保存图像时,所有256色都被保存(11到255色都是黑色)。知道它为什么这么做吗
谢谢! 大卫
# 1 楼答案
对于上面的问题,我能想到的最好的解决方案是将图像从IndexColorModel转换为ComponentColorModel。(ComponentColorModel的每个像素都指定了自己的颜色,因此无需使用托盘,您可以轻松使用任何颜色。)
读了http://java.sun.com/products/java-media/jai/forDevelopers/jaifaq.html#palette之后,我想出了这个简单的解决方案
这是我在阅读完一张图片后所做的:
一旦进行了操作,你就可以将图像隐藏回去。我还没花时间弄明白。如果其他人想弄明白,你可能想读一下:http://www.java.net/node/675577