我想要做的很简单:我的图像基本上是带有alpha的单色图像。
编辑:由于我的帖子被轻微标记为重复,以下是与其他帖子的主要区别:
这意味着所有像素都是:
Alpha并不总是一样,我有不同的黑色色调。
我的图像是使用Photoshop生成的,具有以下设置:
考虑到它只有一种颜色,我想我可以使用其他模式(例如灰度可能吗?),请告诉我你是否有这方面的建议。
我想要做的是在我的java应用程序中用另一种颜色替换黑色。
阅读其他主题似乎改变ColorModel是一件好事,但我真的完全不知道如何正确地做到这一点。
这是我做的:
public Test() {
BufferedImage image, newImage;
IndexColorModel newModel;
try {
image = ImageIO.read(new File("E:\\MyImage.png"));
}
catch (IOException e) {e.printStackTrace();}
newModel = createColorModel();
newRaster = newModel.createCompatibleWritableRaster(image.getWidth(), image.getHeight());
newImage = new BufferedImage(newModel, newRaster, false, null);
newImage.getGraphics().drawImage(image, 0, 0, null);
}
private IndexColorModel createColorModel() {
int size = 256;
byte[] r = new byte[size];
byte[] g = new byte[size];
byte[] b = new byte[size];
byte[] a = new byte[size];
for (int i = 0; i < size; i++) {
r[i] = (byte) 21;
g[i] = (byte) 0;
b[i] = (byte) 149;
a[i] = (byte) i;
}
return new IndexColorModel(16, size, r, g, b, a);
}
这会产生预期的结果。
newImage与具有新颜色(21; 0; 149)的图像相同。
但是有一个缺陷:以下行太慢了:
newImage.getGraphics().drawImage(image, 0, 0, null);
在大图像上执行此操作可能需要几秒钟,而我需要将其瞬间完成。
我很确定我不是这样做的好方法。
你能告诉我如何有效地实现这一目标吗?
请考虑我的图片将始终为alpha的单色,因此欢迎提供有关图片格式的建议。