How to effectively color pixels in a BufferedImage?

Posted by Ed Taylor on Stack Overflow See other posts from Stack Overflow or by Ed Taylor
Published on 2010-05-31T23:42:55Z Indexed on 2010/06/01 0:53 UTC
Read the original article Hit count: 288

Filed under:

I'm using the following pice of code to iterate over all pixels in an image and draw a red 1x1 square over the pixels that are within a certain RGB-tolerance. I guess there is a more efficient way to do this? Any ideas appreciated. (bi is a BufferedImage and g2 is a Graphics2D with its color set to Color.RED).

    Color targetColor = new Color(selectedRGB);

    for (int x = 0; x < bi.getWidth(); x++) {
        for (int y = 0; y < bi.getHeight(); y++) {
            Color pixelColor = new Color(bi.getRGB(x, y));
            if (withinTolerance(pixelColor, targetColor)) {
                g2.drawRect(x, y, 1, 1);
            }
        }
    }

private boolean withinTolerance(Color pixelColor, Color targetColor) {
    int pixelRed = pixelColor.getRed();
    int pixelGreen = pixelColor.getGreen();
    int pixelBlue = pixelColor.getBlue();

    int targetRed = targetColor.getRed();
    int targetGreen = targetColor.getGreen();
    int targetBlue = targetColor.getBlue();

    return (((pixelRed >= targetRed - tolRed) && (pixelRed <= targetRed + tolRed)) &&
            ((pixelGreen >= targetGreen - tolGreen) && (pixelGreen <= targetGreen + tolGreen)) &&
            ((pixelBlue >= targetBlue - tolBlue) && (pixelBlue <= targetBlue + tolBlue)));
}

© Stack Overflow or respective owner

Related posts about java