Java 将 BufferedImage 的 ColorSpace 转换为 CS_GRAY 而不使用 ConvertColorOp

标签 java bufferedimage

我知道可以使用

将图像转换为 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。我宁愿只转换我传入的图像。

考虑到图像是 RGB 颜色空间,有人知道如何使用 for 循环执行此操作吗?

最佳答案

ColorConvertOp.filter 采用两个参数。第二个参数也是一个 BufferedImage,它将作为目标。如果您将正确的 BufferedImage 传递给 filter 方法,它可以让您免于创建新的 BufferedImage 的麻烦。

关于Java 将 BufferedImage 的 ColorSpace 转换为 CS_GRAY 而不使用 ConvertColorOp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/886854/

相关文章:

java - JSF 中的 JAXWS 缓存

java - BitmapDrawable 无法转换为 AnimationDrawable

java - 如何调试在 Java 7 下工作但在 Java 8 下不工作的东西

java - 在java中为缓冲图像提供颜色

java - java中的setRgb用于tif缓冲图像丢失其坐标信息

java - 将父对象转换为子对象 - BufferedImage 对象

java - 旋转 BufferedImage 而不丢失像素

java - 是否可以发送输出流作为对 HTTP 请求的响应?

Java双缓冲——访问后像

Java8 CompletableFuture 条件链