Pixel

Pessoal…

Como colorir determinado pixel de uma imagem e depois gravar ela?
Ex.: Em uma imagem 800X600 pintar ela inteira de vermelho, mas o pixel 50 X 50 de branco, o 80X80 de azul, o 75X97 de verde, etc???

A única coisa que consegui fazer até agora é:

[code] BufferedImage imagem = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);

	    Graphics2D g1 = imagem.createGraphics();    
	    g1.setColor(Color.red); //pintar o fundo dela de vermelho  
	    g1.fillRect(0, 0, 800, 600);  
	    g1.dispose();  
	    	   
	   try {
		ImageIO.write(imagem, "jpg", new File("Imagens", "argh.jpg"));
	} catch (IOException e) {
		e.printStackTrace();
	}    [/code]

Agora quero pintar o Pixel [x,y] de alguma cor que eu quiser, tipo html (#F…)

Agradeço!

Basta vc criar um Color novo, e chamar o método fillRect

//Pinta um pixel na coordenada x, y
g1.fillRect(x, y, 1, 1)

para criar uma que você diferente basta instanciar um obejto Color passando parâmetros R, G ,B

//                              R   G  B
Color c = new Color(200, 0, 0);

[]s

Entendi…
Não tem como eu usar Color com código html tipo #fffff?

Sim é só usar o construtor que recebe 3 ints:

Color c = new Color(0xFE, 0xAB, 0x1A);

Para pintar um único pixel, use o método setRgb da classe BufferedImage. Se precisar fazer isso com eficiência, vai ter que usar o Raster:
http://javaboutique.internet.com/tutorials/rasters/
http://javaboutique.internet.com/tutorials/rasters2/

[quote=pedroroxd]Entendi…
Não tem como eu usar Color com código html tipo #fffff?[/quote]

Se tem eu não sei como fazer, cheguei a dar uma pesquisada rápida e nada encontrei.
Acho que não deve ser complicado converter o código html para RGB, caso você realmente precise da cor neste formato.

[]s

Para converter do HTML para Color, é só usar o Integer.parseInt com base 16.

O contrário é fácil também, basta usar o String.format.

Um exemplo:

String.format("%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue());

Preciso da ajuda de vcs…

Tipo, antes de pintar os pixels eu pinto o background de branco, assim:

BufferedImage imagem = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB); g1 = imagem.createGraphics(); g1.setColor(new Color(255,255,255)); //BRANCO g1.fillRect(0, 0, 800, 600);

Depois, pinto o primeiro pixel assim:

g1.setColor(c); //cor que eu quero g1.fillRect(0, 0, 1, 1); System.out.println(c.getRGB()); // Só pra Teste g1.dispose();
Olha a diferença…
Quando eu imprimo nessa hora acima o RGB, a saída é -2302756
Depois eu vou fazer a leitura do arquivo, e mando ler o pixel 0,0 assim:

System.out.println(img1gp.getRGB(0, 0));

e a saída é -1842205

Todo o resto da imagem a saída é -1 (pq é branco)… O primeiro pixel é o único pintado… Porque dá essa diferença no RGB???

Por que você está usando um fillRect para pintar um único pixel? Não é melhor usar o setRGB, como eu indiquei?

O fillRect pode sofrer suavização. Normalmente isso só é feito se você ligar a qualidade máxima de gráficos, mas não é um método tão confiável se você quiser precisão de cores.

Outra coisa. Faz pouco sentido exibir o número do getRGB para decimal. O ideal mesmo é imprimir em hexadecimal, usando o Integer.toString() com base 16.

Ou, usando o método de print que eu passei acima.

Não entendi direito…

Com o setRGB como ficaria?

Tipo, pintar o pixel 0,0 com a cor 248 248 255
E depois para ler?
Leio com o getRGB mesmo? “img1gp.getRGB(0, 0)”