我知道可以使用
将图像转换为 CS_GRAYpublic static BufferedImage getGrayBufferedImage(BufferedImage image) {
BufferedImageOp op = new ColorConvertOp(ColorSpace
.getInstance(ColorSpace.CS_GRAY), null);
BufferedImage sourceImgGray = op.filter(image, null);
return sourceImgGray;
}
然而,这是我整个计划的一个瓶颈。我需要经常在 800x600 像素图像上执行此操作,平均需要大约 200-300 毫秒才能完成此操作。我知道通过使用一个 for 循环来循环遍历图像数据并立即设置它,我可以更快地完成此操作。另一方面,上面的代码构造了一个全新的 800x600 灰度 BufferedImage。我宁愿只转换我传入的图像。
考虑到图像是 RGB 颜色空间,有人知道如何使用 for 循环执行此操作吗?
最佳答案
ColorConvertOp.filter
采用两个参数。第二个参数也是一个 BufferedImage,它将作为目标。如果您将正确的 BufferedImage
传递给 filter
方法,它可以让您免于创建新的 BufferedImage
的麻烦。
关于Java 将 BufferedImage 的 ColorSpace 转换为 CS_GRAY 而不使用 ConvertColorOp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/886854/