我从未使用过GIMP的colorize命令。但是,如果获取每个像素的RGB值并向其添加RGB值,则应真正使用
LookupOp
。这是我编写的将BufferedImageOp应用于BufferedImage的一些代码。
从上面使用尼克斯的例子,这里我将如何做。
假设每个像素的Y = 0.3 * R + 0.59 * G + 0.11 * B
(R1,G1,B1)是您要着色的
protected LookupOp createColorizeOp(short R1, short G1, short B1) { short[] alpha = new short[256]; short[] red = new short[256]; short[] green = new short[256]; short[] blue = new short[256]; int Y = 0.3*R + 0.59*G + 0.11*B for (short i = 0; i < 256; i++) { alpha[i] = i; red[i] = (R1 + i*.3)/2; green[i] = (G1 + i*.59)/2; blue[i] = (B1 + i*.11)/2; } short[][] data = new short[][] { red, green, blue, alpha }; LookupTable lookupTable = new ShortLookupTable(0, data); return new LookupOp(lookupTable, null);}它创建一个BufferedImageOp,如果mask布尔值为true,则将屏蔽每种颜色。
调用起来也很简单。
BufferedImageOp colorizeFilter = createColorizeOp(R1, G1, B1);BufferedImage targetImage = colorizeFilter.filter(sourceImage, null);
如果这不是您想要的,我建议您进一步研究BufferedImageOp。
这也将更加有效,因为您无需对不同的图像进行多次计算。或者只要R1,G1,B1值不变,就在不同的BufferedImages上再次进行计算。



