如何使用Java图像处理查找表来替换缓冲图像中的单个颜色

时间:2015-01-01 02:43:44

标签: java image-processing graphics2d java-2d

我正在写一个视频游戏,我正在寻找一种快速重新着色图像的方法。图像目前是黑色的,我想用红色重新着色整个图像。

有人能指出我如何使用Java图像处理库LookupTables如何只替换一种颜色吗?我很难找到一个如何做到这一点的例子。 看来你要编写的这些过滤器应该比通过每个像素进行交互更快。这是对的吗?

如果可以提供关于如何使用LookupTable将一种颜色替换为另一种颜色(例如用红色替换黑色)的示例代码,那就太棒了!

感谢。

以下是JavaDocs for Java SE 6中的一些代码。您如何编写createImage?

Image src = getImage("doc:///demo/images/duke/T1.gif");
ImageFilter colorfilter = new RedBlueSwapFilter();
Image img = createImage(new FilteredImageSource(src.getSource(),
                        colorfilter)); // <--- How do you write this?

这是来自JavaDocs SE 6的代码RedBlueSwapFilter。我假设我可以用红色和蓝色代替黑色和红色十六进制代码? (即我想用红色代替黑色)

class RedBlueSwapFilter extends RGBImageFilter {
    public RedBlueSwapFilter() {
        // The filter's operation does not depend on the
        // pixel's location, so IndexColorModels can be
        // filtered directly.
        canFilterIndexColorModel = true;
    }

    public int filterRGB(int x, int y, int rgb) {
        return ((rgb & 0xff00ff00)
                | ((rgb & 0xff0000) >> 16)
                | ((rgb & 0xff) << 16));
    }
}

感谢您的帮助!谢谢!

1 个答案:

答案 0 :(得分:0)

如果您需要一个完全红色的图像(并且它之前的颜色并不重要),那么有一种更简单,更快捷的方式:

BufferedImage image = ... // your existing image
Graphics2D g = image.createGraphics();
g.setPaint(Color.RED);
g.fillRect(0, 0, image.getWidth(), image.getHeight());
g.dispose();

如果您只需要用红色像素替换黑色像素,那么您可以像这样使用RGBImageFilter:

public int filterRGB(int x, int y, int rgb) {
    if(rgb == 0xff000000) { // if it was pure black
        return 0xffff0000; // change it to red 
    } else {
        return rgb; // else return as it was
    }
}