Graphics.fillRect com BufferedImage

Boa tarde a todos.

Estou precisando criar uma imagem com um único pixel colorido em meio a um painel branco e pra isso tentei de duas maneiras que não estão terminando no resultado desejado.

Antes de tudo, hoje eu crio uma BufferedImage, obtenho o Graphics através de getGraphics() e chamo o método fillRect(…) preenchendo-a de branco e depois:

  1. chamo o método setRGB(x, y, cor) passando um inteiro no formato RGB do pixel que eu quero colorir;
    ou
  2. chamo novamente o fillRect passando (x, y, 1, 1) pra que ele pinte somente 1 pixel.

Em seguida obtenho os bytes da imagem e mando salvar em um arquivo.

Na primeira situação, o arquivo salvo é apenas uma imagem em branco. Como se o setRGB nada fizesse com o pixel que eu queria que aparecesse. Na segunda, o pixel aparece na imagem salva, mas com os pixels em volta também coloridos de um cinza claro… um efeito semelhante ao que aconteceria se eu redimensionasse a imagem e ela perdesse a qualidade por conta disso.

De qualquer forma, essa última situação, por mais próxima que me atende, não pode ser aplicada pois preciso da imagem com um pixel colorido somente, sem distorções ou sujeira em volta do mesmo.

Alguém faz idéia de onde vem essa distorção ou perda de qualidade?

Obrigado!

Qual é o formato em que você está salvando a imagem? Se for JPEG pode ser que esse pixel suma (lembre-se, JPEG tem compressão com perdas).

Para verificar que é isso mesmo, experimente gravar em um formato sem perdas (como PNG) e veja o que ocorreu.

Já tentei PNG e BMP e nada muda, o pixel continua “distorcido”.

Uma opção é usar um casting pra graphics2d, trocar a cor do pincel, e pintar um polígono de um único ponto, tipo:

grafico.setColor(Color.black);
((Graphics2D)grafico).drawPolyline(new int[]{x}, new int[]{y}, 1);

Já tentei isso também. Estou anexando a imagem que ele gera. Repare nos pontos cinzas em volta do pixel.

Problema resolvido! Eu estava dando mole porque o ImageIO.write estava passando “jpg” ao invés de “bmp” e isso reduzia a qualidade da Imagem! Obrigado pessoal!