Olá estive lendo alguns tópicos daqui e me deparei com um trecho que me ajudou bastante no desenvolvimento de uma rotina que trabalha com imagens…
A minha rotina seria o seguinte…
Tenho uma determinada imagem e presciso que o programa localize , por exemplo todos os tons de cinza e branco e substitua por uma outra cor qualquer…verde por exemplo…
o código que me ajudou me exclareceu algumas dúvidas seria este…
try {
// obtenho uma BufferedImage de um arquivo de imagem...
BufferedImage img = ImageIO.read(new File("C:\\Users\\leopoldo\\Desktop\\dente48Lado.png"));
// capturo o Raster da imagem num objeto do tipo WritableRaster (que permite alteração do Raster)...
WritableRaster r = img.getRaster();
// crio um vetor que conterá os pixels varridos pelo Raster...
int pixels[] = new int[img.getWidth() * img.getHeight()];
// calculo a matriz de pixels da imagem com base na largura x altura...
for (int x = 0; x < img.getWidth(); x++) {
for (int y = 0; y < img.getHeight(); y++) {
// gravo os pixels do eixo x,y no vetor...
r.getPixel(x, y, pixels);
// comparo os pixels desse eixo com as cores RGB que eu quiser substituir...
if (pixels[0] == 255 && pixels[1] == 255 && pixels[2] == 255) {
// substituo os cores RGB da comparação por outras que eu quiser...
pixels[0] = 142;
pixels[1] = 252;
pixels[2] = 0;
r.setPixel(x, y, pixels);
}
}
}
// e, por fim, atualizo a imagem com o Raster modificado...
img.setData(r);
ImageIO.write(img, "png", new File("C:\\Users\\leopoldo\\Desktop\\imagemFinal.png"));
} catch (Exception ex) {
ex.printStackTrace();
}
O problema é que presciso não somente substituir a cor branca, que está no exemplo, e sim todas as variações dele e de cinza também… se eu fosse informar todas as variações segundo os código de cores rgb, eu iria preencher umas 1000 linhas de variações de cinza diferentes…
Teria alguma maneira de pegar esses tons que presciso especificando uma espécie de intervalo de cores ou sei lá…teria como saber se tal codificação rgb seria cinza forte ou escuro?