Pixel

11 respostas
pedroroxd

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 é:
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();
		}
Agora quero pintar o Pixel [x,y] de alguma cor que eu quiser, tipo html (#F...)

Agradeço!

11 Respostas

Naruffy

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

pedroroxd

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

ViniGodoy

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/

Naruffy

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

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

ViniGodoy

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.

ViniGodoy

Um exemplo:

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

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???

ViniGodoy

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.

ViniGodoy

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.

pedroroxd

Não entendi direito…

pedroroxd

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)

Criado 8 de outubro de 2010
Ultima resposta 10 de out. de 2010
Respostas 11
Participantes 3