package net.hearthstats.game.imageanalysis; import java.awt.image.BufferedImage; import net.hearthstats.util.Coordinate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Tests whether an individual pixels, or set of pixels, matched the expected * colour value. * * @author gtch */ public class IndividualPixelAnalyser extends CoordinateCacheBase { private final static Logger debugLog = LoggerFactory.getLogger(IndividualPixelAnalyser.class); public boolean testAllPixelsMatch(BufferedImage image, UniquePixel[] uniquePixels) { for (UniquePixel uniquePixel : uniquePixels) { UniquePixelIdentifier upi = new UniquePixelIdentifier(uniquePixel.x(), uniquePixel.y(), image.getWidth(), image.getHeight()); Coordinate coordinate = getCachedCoordinate(upi); int x = coordinate.x(); int y = coordinate.y(); int rgb = image.getRGB(x, y); int red = (rgb >> 16) & 0xFF; int green = (rgb >> 8) & 0xFF; int blue = (rgb & 0xFF); if (red < uniquePixel.minRed || red > uniquePixel.maxRed || green < uniquePixel.minGreen || green > uniquePixel.maxGreen || blue < uniquePixel.minBlue || blue > uniquePixel.maxBlue) { // This pixel is outside the expected range return false; } } // No pixel texts failed, so this is a match debugLog.debug("matched all pixels {}", (Object[]) uniquePixels); return true; } boolean testAnyPixelsMatch(BufferedImage image, UniquePixel[] uniquePixels) { for (UniquePixel uniquePixel : uniquePixels) { UniquePixelIdentifier upi = new UniquePixelIdentifier(uniquePixel.x(), uniquePixel.y(), image.getWidth(), image.getHeight()); Coordinate coordinate = getCachedCoordinate(upi); int x = coordinate.x(); int y = coordinate.y(); int rgb = image.getRGB(x, y); int red = (rgb >> 16) & 0xFF; int green = (rgb >> 8) & 0xFF; int blue = (rgb & 0xFF); if (red >= uniquePixel.minRed && red <= uniquePixel.maxRed && green >= uniquePixel.minGreen && green <= uniquePixel.maxGreen && blue >= uniquePixel.minBlue && blue <= uniquePixel.maxBlue) { // This pixel is inside the expected range so it's an immediate match debugLog.debug("matched {} any from pixel {}", uniquePixel, uniquePixels); return true; } } // All pixel text failed, so this is not a match return false; } }