我知道可以使用将图像转换为 CS_GRAY
public 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,它是灰度的。我宁愿只是转换我传入的图像。
有没有人知道如何使用 for 循环并假设图像是 RGB 颜色空间?