gpt4 book ai didi

java - 使用 JAI,如何向调色板添加新颜色?

转载 作者:行者123 更新时间:2023-12-01 05:36:51 31 4
gpt4 key购买 nike

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

谢谢!大卫

最佳答案

针对上述问题,我能想到的最佳解决方案是将图像从 IndexColorModel 转换为 ComponentColorModel。 (ComponentColorModel 的每个像素指定其自己的颜色,因此您无需使用调色板 - 您可以轻松使用您想要的任何颜色。)

阅读 http://java.sun.com/products/java-media/jai/forDevelopers/jaifaq.html#palette 后,我想出了这个简单的解决方案

这就是我在阅读以下图像后所做的事情:

if(image.getColorModel() instanceof IndexColorModel) {
IndexColorModel icm = (IndexColorModel)image.getColorModel();
byte[][] data = new byte[4][icm.getMapSize()];

icm.getReds(data[0]);
icm.getGreens(data[1]);
icm.getBlues(data[2]);
icm.getAlphas(data[3]);

LookupTableJAI lut = new LookupTableJAI(data);

image = JAI.create("lookup", image, lut);
}

完成操作后,您可以将图像隐藏回来。我还没有花时间去弄清楚这一点。如果其他人想弄清楚,您可能需要阅读以下内容:http://www.java.net/node/675577

关于java - 使用 JAI,如何向调色板添加新颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8055522/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com