【问题标题】:java buffered image color op with different values for RGB具有不同RGB值的java缓冲图像颜色操作
【发布时间】:2014-06-11 20:12:27
【问题描述】:

我有一个以灰度绘制的缓冲图像,我想将其转换为颜色,其中颜色映射到灰色的某些范围。例如,0-100 之间的所有灰色都映射为红色,100-255 之间的所有灰色都映射为绿色。看起来缓冲图像查找操作是执行此操作的方法,但我不完全确定如何执行此操作。例如,如果灰度图像的 RGB 为 (50,50,50),我想将该像素转换为 (255,0,0),而不是 (255,255,255)。查找操作是正确的方法吗?

【问题讨论】:

  • LookupOp 更适用于 每种 颜色单独映射到 一种 其他颜色的情况。因此,根据描述,这听起来像 Braj 的回答中的一种方法可能更适合这里。您可以将查询 if(red==50...) 替换为 if (red<50...) 以真正处理颜色 范围。如果您的意图是“着色”/“染色”图像(保持所有像素的亮度相同,但赋予它们某些颜色),它可能会更复杂一些。如果是这种情况,您应该在问题中指出。

标签: java colors bufferedimage


【解决方案1】:

如果灰度图像的 RGB 为 (50,50,50),我想将该像素转换为 (255,0,0)

试试这个

try {
    BufferedImage image = ImageIO.read(new File("resources/Tulips.jpg"));
    BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight(),
            BufferedImage.TYPE_INT_ARGB);

    int newColorRGB = new Color(255, 0, 0).getRGB();
    for (int x = 0; x < image.getWidth(); x++) {
        for (int y = 0; y < image.getHeight(); y++) {
            Color color = new Color(image.getRGB(x, y));
            int red = color.getRed();
            int blue = color.getBlue();
            int green = color.getGreen();

            if (red == 50 && blue == 50 && green == 50) {
                newImage.setRGB(x, y, newColorRGB);
            } else {
                newImage.setRGB(x, y, color.getRGB());
            }
        }
    }
    ImageIO.write(newImage, "png", new File("resources/Tulips1.png"));
} catch (IOException e) {
    e.printStackTrace();
    System.out.println("Sorry, I cannot find that file.");
}

注意:根据您的要求更改图像类型。

【讨论】:

  • 谢谢,我想这可以解决问题。不确定是否有更“蛮力”的方式来做到这一点。
  • 欲了解更多信息,请查看How to convert a BufferedImage to a certain colour?。 @Hovercraft Full Of Eels 使用RGBImageFilter 发布了一些示例代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
相关资源
最近更新 更多